我正在使用JPA并使用Hibernate作为我的SQL Server数据库的提供程序。
我需要一个多对多的自引用关系,它有一个额外的列或更多的列。
这是我目前的代码。我正在通过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;
}
在运行时我从hibernate获取异常:
org.hibernate.TransientObjectException: object references an unsaved transient instance
有没有办法更智能,更好地实现这一点?没有得到那个例外。
谢谢, ihrigb
答案 0 :(得分:0)
如果对象与Hibernate Session
无关,则该对象将为Transient
。
保存Relation
时,Transient
列表的实例可能为Person
(通常,该实例没有标识符值)。
Here是了解对象状态的更好方法。