热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jpa不设置别名_使用JPA实现DDD持久化O/R映射元数据特殊属性映射:ID、Version和Transient...

特殊属性映射:ID、Version和Transient实体类有一些特殊的属性,典型的有两个:实体标识符属性和乐观锁属性。由于这两个属性是所
cd52c4bdc748500ccdf2cfb96b616504.png

特殊属性映射:ID、Version和Transient

实体类有一些特殊的属性,典型的有两个:实体标识符属性和乐观锁属性。由于这两个属性是所有的实体通用的,我将它们定义在一个抽象基类BaseEntity中,由所有的实体类直接或间接继承。BaseEntity被类级逻辑注解@MappedSuperclass标识,其意义在下文继承映射中讲述。

一、ID属性

前文说过,实体必须拥有唯一的标识符,用于区别同类的其他实体。实体标识符属性用@Id逻辑注解标识。这个注解可以继承。

一个类要成为实体类,至少要同时符合下面的条件:

  • 在类级拥有@Entity注解。
  • 在自有或继承的可以作为标识符的属性上拥有@Id注解。

下面是@Id注解标识的标识符属性:

@MappedSuperclass
public abstract class BaseEntity implements Serializable {@Id@GeneratedValueprivate int id;
}

实体的ID属性是关联实体对象实例和数据行的关键。通常实体利用这个属性值作为对象标识符而数据库表利用它作为数据行的主键值。

实体ID既可以由应用代码设置(例如UUID就是很好的候选),也可以由数据库生成。上面的例子中,整型的标识符字段id除了被注解为@Id之外还被注解为GeneratedValue。后者告知JPA实现框架由数据库负责生成实体ID值。当需要由数据库生成ID时,ID属性的类型通常受限为整数或长整数。

值对象没有ID,所以不需要拥有用@Id注解的属性。

二、版本属性

JPA通过在实体类上定义一个类型为整数/长整数并注解为@Version的属性来添加对表数据的乐观锁定的支持。

这个属性会随着对实体的每一次修改而递增它的值。当JPA获取一个对象时,会记录下它当时的版本值。当修改后再次保存该实体时,JPA会再次访问数据库,检查这个版本值是否仍然是当初的值。如果是,说明这个实体在这段时间内没有被别人修改过,可以顺利保存。如果不是,说明这个在这段时间内实体已经被别人修改过,保存会失败,并抛出乐观锁异常。通过这样的方式,可以防止数据被并发修改。

版本属性不是必须的,但强烈建议在所有的实体类上添加这个属性。

由于我决定让所有的实体都拥有版本属性,所以我把这个属性定义在所有实体的基类BaseEntity中:

@MappedSuperclass
public abstract class BaseEntity implements Serializable {@Versionprivate int version;}

三、瞬态属性

在实体和值对象中,默认状态下所有的实例属性都是要持久化到数据库中的,与数据库中的列有对应关系。但是以下的属性不会持久化到数据库中:

  • 静态属性
  • 添加有transient修饰符的实例属性
  • 添加有@Transient注解的实例属性

因此,如果你想在对象持久化范围中排除某些属性,可以给该属性添加transient修饰符或@Transient注解。

@Entity
@Table(name = "order_lines")
public class OrderLine extends BaseEntity {@Transientprivate Money subTotal;
}

详细内容请戳这里↓↓↓

原创 | 使用JPA实现DDD持久化-O/R映射元数据-特殊属性映射:ID、Version和Transient

这一节就讲到这里,下一节我们讲"值属性映射"

如果觉得有收获,点个【赞】鼓励一下呗!

a6f05049164b014f4d0e5733d67f7a2e.png



推荐阅读
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • MybatisPlus入门系列(13) MybatisPlus之自定义ID生成器
    数据库ID生成策略在数据库表设计时,主键ID是必不可少的字段,如何优雅的设计数据库ID,适应当前业务场景,需要根据需求选取 ... [详细]
  • 主从复制_mysql主从复制简介
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql主从复制简介相关的知识,希望对你有一定的参考价值。  ... [详细]
  • 表里|层面_ShardingJDBC第一篇:分库分表
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了ShardingJDBC第一篇:分库分表相关的知识,希望对你有一定的参考价值。文章目录 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 基于Redis实现分布式锁剖析
    之前的文章《分布式锁详解-分别利用Zookeeper和数据库实现分布式锁》,由于篇幅太长,又碰上加班时间不够充裕,所以没有把Redis的实 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
author-avatar
COMEX黄金2502897957
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有