jpa native 映射对象_原创 | 使用JPA实现DDD持久化O/R映射元数据:类级映射实体和值对象...

85622fbbd47df21829c8dc5907be8068.gif

df224d72c23562e5d50940a721ed336b.png

重要性 :★★★☆☆

第二章:JPA与Hibernate实例

第四节:O/R映射元数据

类级映射

可以被持久化的类包括实体值对象两大类。

6686cd8261977d35e9e7c6f4c0d6b20b.png

实体映射

通过给一个类添加@Entity逻辑注解,告知JPA这是一个可以持久化的实体类。

请注意@Entity逻辑注解不可以继承。这意味着如果如果父类和子类都是实体类,那么就需要分别在父类和子类上都添加@Entity,子类不能通过从父类继承这个注解而自动成为实体类。

实体类上还可以添加可选的@Table物理映射,表明需要将实体映射到的数据库表。这个注解有一个name属性,用于指定表名。

如果不添加@Table映射,JPA默认将实体类映射到同名的数据库表中。出于下面的两个原因,我倾向于为每个实体类添加@Table注解:

  • 由多个单词组成的实体类(例如实体类名OrderLine就是由两个单词OrderLine组成)可以通过驼峰式命名风格在视觉上明显区分多个组成词汇。但某些数据库如Oracle会采用全大写形式(例如ORDERLINE)命名表,这样多个单词就无法在视觉上分辨出来。我喜欢给数据库表明确命名,用下划线分隔单词(例如ORDER_LINES)

  • 数据表是记录的集合,用复数的形式命名表更加具有现实意义。当JPA实现框架在后台生成和显示SQL语句时,“SELECT * FROM ORDERLINE”明显不如“SELECT * FROM ORDER_LINES”更加具有表达性。

如果在persistence.xml中将Hibernate属性hibernate.hbm2ddl.auto配置为非none的值,Hibernate第一次启动时将会根据实体类上提供的映射元数据自动生成数据库表结构。

下面是实体类Order的类级映射:

@Entity@Table(name = "orders")public class Order extends BaseEntity {  ...}

fac5b2e265d9db833e1854b16c47bb55.png

值对象映射

通过给一个类添加 @Embeddable逻辑注解,告知 JPA这是一个可持久化的值对象。下面是值对象 Address的类级映射:
@Embeddablepublic class Address {  ...}
也可以不在值对象类级添加 @Embeddable 逻辑注解,而是在值对象作为另一个实体的单值属性(例如值对象 Address 作为实体 OrdershippingAddress 属性类型)时,在实体属性上添加 @Embedded 逻辑注解,告知 JPA 实体的这个属性的类型是一个值对象。例如:
@Entity@Table(name = "orders")public class Order extends BaseEntity {    @Embedded  private Address shippingAddress;}
请务必牢记 Embeddable 是类级注解,用于标记值对象类;而 @Embedded 是属性级注解,用于标注实体类的某个属性,其类型是单值的值对象。二者不需要同时存在。我倾向于在属性上上注解 Embedded

这一节就讲到这里,下一节我们讲"特殊属性映射:ID、Version和Transient"

如果觉得有收获,右下角点个【在看鼓励一下呗!

- THE END -

原创作者 | 杨宇

编程道与术原创内容

转载请注明“编程道与术”出处

=   往期热门内容  =

e9461a7947b462675f1d84714ade5dbb.gif

42e6fd69e12d5a51b6227e4997c06fa7.gif

7e89fe90e4ce53ebdc99eed9e1b47e2d.gif

39d570915bb47752809211e8e741e7b5.gif

c6d54274cad835d3384a8099dcf853ff.gif

94bbb6eff6a6f7d61d6de5118e58908e.gif

14b19fdc085028b56926642c27de4692.png

a7e1642c42181d291934a47454c44ddf.png分享 97d6015ba537d51864cb26b8a1aff3f3.png点收藏 ecde26019745893c348bf7684be817c2.png点点赞 a8fe0047f4d72af3a85ec58b4a255639.png点在看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值