2012-11-14 48 views
1

我正在使用JPA並使用Hibernate作爲我的SQL Server數據庫的提供者。JPA與其他列的多對多自引用關係

我需要一個多對多的自引用關係,它有一個額外的列或更多的附加列。

這是我現在的代碼。我由Hibernate得到例外:

@Entity 
public class Person { 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "person", fetch = FetchType.EAGER) 
    private Set<Relation> relations; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "relPerson", fetch = FetchType.EAGER) 
    private Set<Relation> inverseRelations; 
} 

@Entity 
public class Relation implements Serializable { 
    @Id 
    @ManyToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER) 
    @PrimaryKeyJoinColumn(name = "PersonID", referencedColumnName = "id") 
    private Person person; 

    @Id 
    @ManyToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER) 
    @PrimaryKeyJoinColumn(name = "RelPersonId", referencedColumnName = "id") 
    private Person relPerson; 
} 

在運行時我得到一個異常從休眠狀態:

org.hibernate.TransientObjectException: object references an unsaved transient instance 

有什麼辦法來實現這個有點更智能,更漂亮?沒有得到這種例外。

謝謝, ihrigb

+0

似乎錯誤與實體定義無關,你可以發佈代碼引發異常的原因嗎? – remigio

+0

它只是一個來自jsp –

+0

的消息,但是應用程序服務器層中會拋出異常,所以您可以顯示使用實體的上下文,否則無法爲您提供幫助。 – remigio

回答

0

如果不與Hibernate Session相關聯的對象,該對象將被Transient

當您保存Person時,Relation列表的實例可能是Transient(通常,該實例沒有標識符值)。

Here是理解對象狀態的更好方法。

+0

那麼如何將這些對象存儲在數據庫中? –

+0

'瞬態'對象不能存儲在數據庫中。 – CycDemo