3

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

在运行时,我从休眠中得到一个异常:

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

有什么方法可以更智能和更好地实现这一点?没有得到那个例外。

谢谢, ihrigb

4

1 回答 1

0

如果一个对象不与 a 关联Hibernate Session,则该对象将是Transient

当您保存时,列表的一个实例Relation可能是Transient(通常,该实例没有标识符值)Person

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

于 2012-11-14T16:20:15.233 回答