2013-03-28 41 views
2

這不是一個新的例外。我經歷了很多堆棧溢出的論壇帖子,並理解爲什麼會發生這種情況。但我需要幫助解決我的問題。EJB異常 - 嘗試使用具有空會話的間接遍歷關係。

我有兩個實體bean設備類和設備。以下是代碼。

public class EquipmentClass implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Basic(optional = false) 
    @Column(name = "class_name") 
    private String className; 
    @Column(name = "description") 
    private String description; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "equipmentClass") 
    private Collection<Equipment> equipmentCollection; 

    // getter and setter methods 
} 


public class Equipment implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Basic(optional = false) 
    @Column(name = "created_on") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date createdOn; 
    @Basic(optional = false) 
    @Column(name = "updated_on") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date updatedOn; 
    @JoinColumn(name = "equipment_class", referencedColumnName = "id") 
    @ManyToOne(optional = false) 
    private EquipmentClass equipmentClass; 

    // setter and getter methods 

} 

期間添加一個設備,我設置設備類和使用equipmentFacade.create(equipment);堅持它(該堅持的實體)

EquipmentClass ec = equipment.getEquipmentClass(); 
>>> ec.getEquipmentCollection().add(equipment); << 
    equipmentClassFacade.edit(ec); 

我得到異常的標記(>> <)線以上。

如解釋here,我試圖做ec.getEquipmentCollection().size();。但我在那裏得到例外。

我該如何繼續?任何幫助深表感謝。

+0

需要'equipmentFacade.create'方法內容。 Imho它只是方法調用時丟失的持久化上下文的一個pb。 – Gab 2013-03-28 15:51:23

+0

getEntityManager()。persist(entity);這正是創建方法的內部。 – Jay 2013-03-28 16:19:25

回答

3

我想,如果你在equipment實例檢索後添加equipment.getEquipmentClass().getEquipmentCollection().size()它將解決你的問題。
事實可能是,在您調用getEquipmentCollection()的地方,persitence上下文無法再訪問,但我需要有關上下文的其他信息來幫助您(ejb,事務上下文等)。
你可以在拋出異常的地方訪問entityManager實例嗎?

+2

我真的解決了這個問題。你的回答確實幫助我解決了這個問題。我所做的是不是從'equipment.getEquipmentClass();'中檢索設備類對象,而是使用'equipmentClassFacade.find(equipment.getEquipmentClass()。getId());'這幫助我獲得當前的持久對象設備類。然後我簡單地使用'ec.getEquipmentCollection()。add(設備); '添加對象。非常感謝你的回覆。 – Jay 2013-04-02 09:24:22

+0

不客氣;) – Gab 2013-04-02 09:27:59