JPA有许多自我引用与附加列的关系

时间:2012-11-14 15:11:54

标签: java database hibernate jpa many-to-many

我正在使用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

1 个答案:

答案 0 :(得分:0)

如果对象与Hibernate Session无关,则该对象将为Transient

保存Relation时,Transient列表的实例可能为Person(通常,该实例没有标识符值)。

Here是了解对象状态的更好方法。