3

私は JPA を使用しており、SQL Server データベースへのプロバイダーとして Hibernate を使用しています。

追加の列またはさらに追加の列を持つ多対多の自己参照関係が必要です。

それが私の現在のコードです。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

これをもう少し賢くうまく実装する方法はありますか?? その例外を取得せずに。

ありがとう、

4

1 に答える 1

0

オブジェクトが に関連付けられていない場合、オブジェクトHibernate Sessionは になりますTransient

RelationリストのインスタンスはTransient、保存時に (通常、そのインスタンスの識別子の値はありません) になる場合がありますPerson

これは、オブジェクトの状態を理解するためのより良い方法です。

于 2012-11-14T16:20:15.233 に答える