1

次のデータベース モデルがあります。

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;
    }

}

4

0 に答える 0