私は休止状態を使用しており、データ モデルでは 2 つの異なる場所で Hibernate.Inheritence Single-Table を使用していますが、相互に反応するときに問題があります。この例で単純化してみましょう。
基本的に何が起こるかというと、letter.setWord(word) を実行して保存すると、その単語には文字への参照がありません。マップされたByの私の理解から、両端で明示的に設定して保存する必要はありませんか? データベースを見ると、参照している Word の GUID でフィールドが適切に設定されています。私は何か間違ったことをしていますか?
補足: ゲッターに注釈を付けた理由は、それらがグローバル変数に直接配置されている場合、休止状態がそれらをまったく取得しないためです。(Letter から拡張されたクラスに主キー エラーが設定されていませんでした)。休止状態は、相互に参照する複数の継承テーブルを処理しませんか? 継承テーブルが 1 つしかない場合、グローバル変数に直接注釈を付けると、すべてが正常に機能します。
ありがとう、マイク
@Entity
@Table(name="Letter")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name = "LETTER_TYPE",
discriminatorType=DiscriminatorType.STRING)
public abstract class Letter {
private String id;
private String value;
private Word word;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDHexGenerator")
@Access(AccessType.PROPERTY)
public String getId() {
return id;
}
@Column(name = "VALUE")
@Access(AccessType.PROPERTY)
public String getValue() {
return value;
}
@ManyToOne
@JoinColumn(name = "WORD_ID")
@Access(AccessType.PROPERTY)
public Word getWord() {
return word;
}
********BASIC SETTERS WITH NO ANNOTATIONS********
}
@Entity
@Table(name="Word")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name = "WORD_TYPE",
discriminatorType=DiscriminatorType.STRING)
public abstract class Word {
private String value;
private List<Letter> letters;
private String id;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDHexGenerator")
@Access(AccessType.PROPERTY)
public String getId() {
return id;
}
@Column(name = "VALUE")
@Access(AccessType.PROPERTY)
public String getValue() {
return value;
}
@OneToMany(mappedBy="word")
@Cascade({CascadeType.ALL})
@Access(AccessType.PROPERTY)
public List<Letter> getLetters() {
return letters;
}
***************BASIC SETTERS WITH NO ANNOTATIONS**********
}