我有一个关于 Hibernate 的一般性问题正在解决。
我有 A 类和 B 类,其中 B 依赖于 A
在我的代码中,当我调用 em.persist(objOfTypeA) 时,我希望插入并插入到表 AAA 和 BBB 中。如果我手动保留 A 获取 A 的 ID 并将其填充到每个对象的列表中,然后保留该列表,则一切正常。
但我希望这会发生神奇地通过休眠。
难道我做错了什么?
或者我只是对 Hibernate 期望太高?
Thanks
@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 仍然为 NULL)
这确实有效:
@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name="AId")
@NotNull
private List<B> b;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)