0

エンティティの状態についてはまだ完全に明確ではなく、次の状況に関していくつかのことを試してみましたが失敗しました:

@Entity
public class Foo {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", nullable = false)
    private long id;
    /* other fields */
    @NotNull
    @ManyToOne
    @JoinColumn(name = "related_bar", nullable = false)
    private Bar bar;
    /* getters & setters */
}

@Entity
public class Bar {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", nullable = false)
    private long id;
    /* other fields & methods*/
}

通常、データが Foo 作成フォームから送信されると、関連するバーの ID が送信されます (ただし、他の属性ではなく、そこでは使用されません)。新しい Foo を永続化するときに ID が設定されている Bar インスタンスをアタッチする (永続化しない) ようにエンティティ マネージャーに自動的に指示する方法はありますか?

よろしくお願いします。

ロルフ

4

1 に答える 1

1
Bar bar = em.getReference(Bar.class, barId);
foo.setBar(bar);

getReference()データベースにも移動しません。実際のバーにプロキシを返します。存在しない場合は、foreigkキー参照エラーが原因で、フラッシュ時にエラーがスローされます。エンティティが存在することを確認する場合:

Bar bar = em.find(Bar.class, barId);
if (bar == null) {
    throw someException();
}
foo.setBar(bar);
于 2012-03-04T09:54:56.180 に答える