Hibernate Cascade Persist
質問
私は私が戦っている休眠について一般的な質問をしています。
クラスAとクラスBを持っています。ここで、bはa に依存します
私がem.persist(objoftypea)を呼び出すときの私のコードでは、挿入が行くと、Tables AAAとBBBの両方に挿入されます。手動でAを取得し、各オブジェクトのリストにそれをリストに記入してからそのリストを永続化してください。 しかし、私はこれがハイバネートによって魔法のようにに起こると予想します。
私は何か悪いことをしていますか? それとも私は冬眠を期待していますか?
ありがとう
@Entity
@Table(name = "AAA")
@Veto
public class A {
@Id
@GeneratedValue
@Column(name = "Id")
private Long id;
@NotNull
@Column(name = "Name")
private Long name;
...
@OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<B> b;
...
}
@Entity
@Table(name = "BBB")
@Veto
public class B {
@Id
@GeneratedValue
@Column(name="Id")
private Long id;
@NotNull
@Column(name="AId")
private Long aId;
@NotNull
@Column(name = "Name")
private Long name;
@JoinColumn(name = "AId", referencedColumnName="Id", updatable = false, insertable = false)
@ManyToOne(optional = false)
private A a;
...
}
. 解決
私はついにそれを取り出しました。 私が与えられた例のどれも私に何が間違っていたのか私に言わなかった、それは私がこの結論に来ることができた私自身の実験の後にのみだった: の代わりに
@OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<B> b;
.
うまくいかなかった(FKはまだヌルとして来ていました)
これはうまくいった:
@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name="AId")
@NotNull
private List<B> b;
. 他のヒント
Class B
のマッピングを以下のように変更する
@Entity
@Table(name = "BBB")
@Veto
public class B {
@Id
@GeneratedValue
@Column(name="Id")
private Long id;
@NotNull
@Column(name="AId", updatable = false, insertable = false)
private Long aId;
@NotNull
@Column(name = "Name")
private Long name;
@JoinColumn(name = "AId", referencedColumnName="Id")
@ManyToOne(optional = false)
private A a;
...
}
.
属性updatable = false, insertable = false
を間違った場所で使用していて、それを修正しました。
ここ。
所属していません StackOverflow