JPA优雅处理父类、嵌入类的属性所对应的数据库字段定义信息

11 篇文章 0 订阅
4 篇文章 0 订阅

背景:使用JPA设计对象,偶尔会用到继承(extends)或者嵌入类(@Embedded)的形式。父类、嵌入类中的属性已经定义了数据库字段约束(或者默认),但该类希望修改继承或者嵌入字段的名称、非空、唯一、长度等约束。比如:父类有一个姓名的属性name,对应的数据库字段定义为@Column(name="name",nullable=false)。但子类希望不要非空约束,允许为空。那么应该怎么办么?

实现方法:

如果是继承就在子类的类定义上添加注解如下:

@AttributeOverrides(value = {
        @AttributeOverride(name = "name", column = @Column(name = "name", nullable = true))

})
public class xxxxx{

如果是嵌入类,就在嵌入类作为本类的属性定义处使用@AttributeOverrides修改。如下:

	@Embedded
	@AttributeOverrides(value = {
		@AttributeOverride(name = "name", column = @Column(name = "name", nullable = true)) })
	private RequestRecord requestRecord;

注意:@AttributeOverride(name = "name", column = @Column(name = "name", nullable = true)中的第一个"name",是指的对象的属性名称,第二个"name"是指的对应数据库字段的名称。如果要把继承或者嵌入的字段名称修改一下。那么就要修改第二个"name"的内容,如下:

@AttributeOverride(name = "name", column = @Column(name = "your_new_name", nullable = true)

小结:使用继承、或者嵌入类的方式定义对象,使得对象之间的关系变得立体丰富、有血有肉,更加准确的表达了对象之间的关系。存储策略上如果要调整,直接去修改父类或者被嵌入类的字段存储定义带有侵入性。通过在子类上或者嵌入类属性定义上使用@AttributeOverrides注解,实现了存储策略修改,极致优雅。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值