Hibernate:级联类型
我们有实体A
和实体B
实体A
与B
有@OneToOne
关系。
我想做下一个:
如果我删除A那么B也必须删除。
如果我删除B,则A不会被删除。
我必须在哪个实体中设置
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
我必须在哪一方设定
@OneToOne(cascade = {CascadeType.ALL})
?
从A到B的级联应该放在B
类引用B
的字段上,从B到A的级联应该放在引用B
类A
的字段上。
public class A { @OneToOne(cascade = {CascadeType.ALL}) B b; }
应该在A
类中,因为您希望每个动作都级联到B
public class B { @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) A a; }
应该在B
级,因为你只想将某些行为级联到A
如果A“有”B,则必须在A中定义CascadeType.ALL:
public class A { // changes to A cascade to B @OneToOne(cascade = {CascadeType.ALL}) B b }
如果A类有B类,那么CascadeType.ALL将在B上应用
Public Class A { Private B b; @OneToOne(cascade = CascadeType.ALL) public B getB() { return this.b; } public void B(B b) { this.b = b; } }
更多阅读这个例子
- Hibernate:OutOfMemoryError:PermGen空间
- getSingleResult在hibernate中返回本机标量查询的代理
- Spring,Hibernate和JPA:在entitymanager上调用persist似乎没有提交数据库
- 在独立应用程序中的hibernate中配置sessionFactory
- JDK 9的Hibernate 5问题
- hibernate composite主键包含一个复合外键,如何映射这个
- Spring 3.1.1用hibernate 4.1注释配置
- 使用什么冲洗模式’自动’或’提交’
- Hibernate和@JoinFormula:org.hibernate.mapping.Formula无法强制转换为org.hibernate.mapping.Column