JPA的实体关联中cascade的使用

 

在一对多关联关系中什么时候应该使用级联的方式呢?

其实是否应该使用级联应该是个业务问题而不是个技术问题。

在一对多的级联中:

如果对象之间是组合关系,使用级联;

如果是聚合关系,不用级联.

 

首先简单说明一下组合和聚合的区别:

这两个词的来源是面向对象的分析与设计的技术中产生的。

当一个对象A是由多个其它对象(B,C,D...)组成的,如果当A不存在了,那么B,C,D...的存在就没有意义的情况下那么它们之间就是组合关系。

如果当A不存在了,B,C,D...单独存在也是有意义的情况下就是聚合关系。

 

下面来举一个一对多组合关系的例子,这个例子中是对JAVA文件的结构进行建模。如图所示:

ER_MAP

某中sourceclass是java文件的信息。

sourcefield是java文件的信息。

sourcemethod是java文件的方法信息。

sourcemethodparameter是java文件的方法参数信息。

sourcemethodreturnvalue是java文件的方法返回值信息。

当一个java的文件被删除了,那么她所对应的属性信息,方法信息的存在就没有意义了。如果当删除java的文件信息的时候,没有删除她的属性信息和方法信息,那么就会留下很多的孤儿-垃圾数据。所以她们之间的关系就属于组合关系。在实体映射的时候,就应该把他们配置级联。

@Entity
@Table( uniqueConstraints = { @UniqueConstraint(columnNames = { "CLASSPACKAGE",
		"NAME" }) })
public class SourceClass {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	// 类的包路径
	private String classPackage = "";
	// 类名称
	private String name = "";
	// 类描述
	@Column(name="remark", length=1000)
	private String remark = "";
	// 类的字段
	@OneToMany(mappedBy = "sourceClass",cascade=CascadeType.ALL)
	private Collection<SourceField> fields = new HashSet<SourceField>();

	// 类的方法集合
	@OneToMany(mappedBy = "sourceClass",cascade=CascadeType.ALL)
	private Collection<SourceMethod> methods = new HashSet<SourceMethod>();

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值