次のデータベース モデルがあります。
A| 1..* ------ 0..1 | B
次のエンティティを使用します。
A:
@JoinColumn(name = "B", referencedColumnName = "id")
@ManyToOne
private B singleB;
B:
@OneToMany(mappedBy = "B")
private List<A> aList;
次に、A の新しい B を作成しようとしています。
...
b.prepareCreate(existingA);
dao.create();
...
方法:
public void prepareCreate(A existingAObject) {
b = new B();
b.setAList(new ArrayList());
b.getAList.add(existingAObject);
}
public void create() {
getEntityManager().persist(b);
}
そして、例外をスローします。簡単に言えば、既存の A に対して新しい B を作成したいのですが、Hibernate が新しい A を作成しようとしています。これは注釈の問題だと思いますが、方法がわかりません。
アップデート:
既存の AObject を取得する方法を教えてください。- データベースから (existingA = em.find(id));
また、A と B の間の関連付けを保存する場合は、関連付けの所有側であるため、A.singleB を設定する必要があることにも注意してください。-それを試しても例外が発生します
そして、エンティティ B の完全なコードを示してください。その ID は何ですか? どのように生成されますか?
非常に簡単です:
public class B implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id", nullable = false)
private Integer id;
@OneToMany(mappedBy = "B")
private List<A> aList;
@XmlTransient
public List<A> getAList() {
return eventos;
}
public void setAList(List<A> aList) {
this.aList= aList;
}
}