2013-11-14 64 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); 
    } 
} 
相關問題