以下のエンティティがあるとしましょう
@Entity
public class Item{
private Country origin;
@ManyToOne(optional=true)
@JoinColumn(name="origin")
public Country getOrigin() {
return this.origin;
}
}
@Entity
public class Country{
private String code;
private String desc;
@Id
public String getCode() {
return this.code;
}
@Column
public String getDesc() {
return this.desc;
}
}
ここで、Country
クラスは事前設定されたマスター テーブルにマップされ、変更しないでください。ユーザーは、新しい を作成するときにorigin
を設定できます。提供されたものがすでにマスターテーブルのエントリであるかどうかを確認するにはどうすればよいですか?code
Item
code
子を永続化せずに存在しないだけpersist()
で新しい場合は、報告されます。この例外を try-catch して、存在しないマスター データとして扱う必要がありますか? または、より良い代替手段はありますか?Item
code
org.hibernate.TransientObjectException
実際には、オブジェクト内にこれらの子エンティティが多数存在するItem
ため、マスター データを 1 つずつ明示的に参照するのは得策ではないと思います。そして、これも良い解決策ではないと思います。