2013-11-14 66 views
0

Car具有1:正关系Feature如何在删除关联对象后同步刷新关系?

@OneToMany(mappedBy="car", fetch = FetchType.EAGER) 
private List<Feature> features; 

的表示在Feature类看起来像这样:

@ManyToOne(fetch = FetchType.EAGER) 
private Car car; 

当我通过与某个Car相关联的一个Feature -object - 对象到DatabaseService#delete()它将成功从数据库中删除,但仍处于Car -Objects功能列表中。

package mypackage; 

import java.io.Serializable; 

import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

@Stateless 
public class DatabaseService implements Serializable { 

    @PersistenceContext 
    private EntityManager em; 

    public void delete(Object o) { 
     o = em.merge(o); 
     em.remove(o); 
    } 
} 
+0

什么问题?你想在'DatabaseService.delete()'方法中做这个泛型吗?被删除的'Feature'实例将在哪个'Car'实例的列表中(你有一个在会话中)? –

+0

@AndreiI是的,我在一个会话中有一个Car实例。我想重复使用'delete()'来处理其他具有关系的对象的情况。 – Lester

+0

问题是来自会话的'Car'实例包含已删除的'Feature'实例? –

回答

0

不要调用Feature上的数据库操作。在集合上设置级联属性,从汽车中删除该功能,然后坚持汽车。然后内存模型和数据库是同步的。

public class Car { 
    @OneToMany(mappedBy = "car", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) 
    private List<Feature> features; 

    public void removeFeature(Feature feature) { 
     features.remove(feature); 
     feature.setCar(null); 
    } 

    public void addFeature(Feature feature){ 
     features.add(feature); 
     feature.setCar(this); 
    } 
} 
相关问题