论文部分内容阅读
摘 要:针对Java EE编程中的JPA持久化问题,讨论了JPA的适用场景,阐述JPA规范的应用原理;在论述中详细分析了JPA持久化过程中的4种不同数据实体状态,以及不同实体状态的转化条件及相关的API操作接口;同时也分析了数据实体间的关联关系,以及不同关联关系在JPA持久化ORM技术中配置实现,最后说明了JPQL语句的原生SQL语句的区别以及其在Java EE领域的重要作用。
关键词:JPA JPQL 持久化规范 ORM
中图分类号:TP311.52 文献标识码:A 文章编号:1672-3791(2019)02(c)-0005-02
JPA即Java 持久化API(Java Persistence API),是Java EE5后提出的的一个持久化规范,此规范参照了EJB3的 Entity Bean(实体Bean)实现过程,其使用JPQL语句来对表实体进行CRUD的操作,在Java语言企业级编程存在着非常广泛的应用。
1 JPA概述
JPA作为一个持久化规范,其专门负责定义与数据存储层的交互标准,定义交互过程,其作为规范,只定义了上层接口,并不负责具体的实现过程,实际上在开发市场中,JPA有众多的实现方式,如Hibernate、TopLink、OpenJPA等持久化框架。
JPA作为一套数据持久化的规范,其思想对ORM编程继承与细化,在Java编程中由于面向对象编程思想与关系型数据库的思维差别,致使应用程序与关系数据库存在一定的交互障碍,ORM作为面向对象的应用程序与关系型数据库间的交互中介桥梁,解决了开发中编码问题,使用开发人员能用使用面向对象的思维去处理和操作关系库。
2 JPA状态表述
在JPA规范中,实体状态的变化都是通过EntityManager接口下的相关函数的被调用而触发的,一个实体从对象变成数据库表中的一条记录,一共可经历4个状态,分别是:新建状态(New)、游离状态(Detached)、受控状态(Managed)、删除状态(Removed)。
新建状态:当一个实体对象刚刚通过new创建出来,还未和其他持久化机制发生任何关联,这时这个实体的实例处于新建状态。
游离状态:当实体对象已经从持久化机制中得到唯一主键,但实例未与持久化机制发生关联关系,则此时对象处于游离状态,当通过EntityManager接口调用clear()方法,实例对象进入游离状态。
受控状态:实体对象已经从持久化机制中得到唯一主键,且已经与持久化机制发生关联关系,则对象处于受控状态,当通过EntityManager接口调用persist()方法,实例对象进入游离状态。
删除状态:如果一个实体对象满足受控的基本要求,即处于受控状态,此时将对象删除,则对象进入删除状态,当通过EntityManager接口调用remove()方法,实例对象到达删除状态。
3 JPA关系实体表述
JPA作为持久化的操作规范,其对应用程序中实体间的关系作了明确的定义,共分三大类型,分别是:一对一(one to one)、一对多(one to many)、多对多(many to many),接下来以Hibernate框架的JPA实现为载体来进行各种实体关系的分析。
一对一:就是两个实体间,一方实体的任一实例只能对应于另一方实体唯一的实例。在日常生活中,例如个人与身份证号码的关系,每个人都有唯一的一个身份证号码,同时每个身份证号码都只能属于某一个人。
具体实现需要在每个实体中引入对方实体作为本类的一个全局属性。如需要在用户(Person)类中引入对方:private Idcard idcard;同时需要在身份证(Idcard)类引对方:private Person person。还要在XML文件做相应的设置,在Person实体的映射文件中加入:<one-to-one name="idcard" />;在Idcard实体的映射文件中加入:<one-to-one name="person" constrained="true" />。
一对多:就是两个实体之间,一方实体的一个实例可以在另一实体中找到若干个与之对应的实例,但另一方实体的一个实例却只能对应对方实体的一个实例。例如,在一个家庭中一对父母親可以生育多个子女,但每个子女却都只能有一对父母亲。
在具体实现中,需要在代表一方的父母实体 (Father) 类中引入一个Set集合属性:private Set sons = new HashSet(0),作为与多方的关联属性;同时需要在代表多方的子女实体 (Son) 类中引入一个Father类型属性:private Father father。最后需要在Father实体映射文件中配置:<set name="sons"><one-to-many class="com.one2many.Son" /></set>;并在Son实体映射文件中配置:<many-to-one name="course" class="com.one2many.Father"><column name="courseId" /></many-to-one>。 多对多:就是两个实体之间,一方实体的一个实例可以在另一方实例中找到若干个与之对应的实例,另一方实体的一个实例也可以在己方实体中找到若干个与之相对应的实例。例如,银行与客户的关系,一家银行可以有众多的客户;反过来,一个客户可以在多家银行开立账户。
在具体实现中,需要把多对多的两个实体,转化为一对多的实体关系进行处理,在两个实体间增加一个桥表实体即可实现以上关系的转化。如在上面的银行与客户的关系实体中,增加一个银行-客户关系实体,作为银行与客户之间的中间桥接实体,两个实体的多对多关系就转化为3个实体间一对多的关系,如图1所示,最后具体的实现方案按一对多的关系处理即可。
4 JPQL语句
JPQL即Java持久化查询语言(Java Persistence Query Language),是专门针对JPA规范而定义的一种面向对象的查询语句,类似于SQL语句,但与原生态的SQL语句有着本质的区别。
原生态SQL语句只能在特定类型的数据库服务器中执行,所写的语句不可在不同类型的数据库中直接移植,如针对MySQL数据库所写原生态SQL语句脚本不能直接在ORACLE数据库上执行。
JPQL语句则是一种可移植面向对象应用程序的操作语句,其所写的语句不直接耦合底层数据库,在应用程序执行时,JPQL语句会被JVM根据不同的数据库类型上最终会解释成不同SQL操作语句,因而其可以实现在不同类型的数据库之间无障碍的移植。
5 结语
JPA是Java EE5后的一个新标准,其是对EJB继承与改进,在主流的三层架构体系中都提供了对JPA标准的支持,Spring2开始支持JPA,Hibernate也是JPA的一种实现方式,Spring+JPA已经成为目前软件工程企业级开发平台的主流搭配方案,随着规范与技术的成熟,JPA会有更加广阔的前景。
参考文献
[1] 欧黎源,邱会中,白亚茹.基于JPA的数据持久化模型设计与实现[J].计算机工程,2009(20):76-77,80.
[2] 谭莹宇.基于Hibernate JPA和JQuery框架的数据查询研究与实现[J].计算机与现代化,2012(1):196-198.
[3] 陳道远.基于JPA规范的通用泛型DAO模式研究[J].软件导刊,2016(12):11-13.
[4] 黄演锋,罗琪.基于JPA技术的面向对象程序设计课程网络教学平台服务器程序设计与实现[J].数字技术与应用,2015(3):141,143.
[5] 胡洁萍,杨树林.JPA与SSH架构整合方案及应用研究[J].北京印刷学院学报,2012(6):50-52.
关键词:JPA JPQL 持久化规范 ORM
中图分类号:TP311.52 文献标识码:A 文章编号:1672-3791(2019)02(c)-0005-02
JPA即Java 持久化API(Java Persistence API),是Java EE5后提出的的一个持久化规范,此规范参照了EJB3的 Entity Bean(实体Bean)实现过程,其使用JPQL语句来对表实体进行CRUD的操作,在Java语言企业级编程存在着非常广泛的应用。
1 JPA概述
JPA作为一个持久化规范,其专门负责定义与数据存储层的交互标准,定义交互过程,其作为规范,只定义了上层接口,并不负责具体的实现过程,实际上在开发市场中,JPA有众多的实现方式,如Hibernate、TopLink、OpenJPA等持久化框架。
JPA作为一套数据持久化的规范,其思想对ORM编程继承与细化,在Java编程中由于面向对象编程思想与关系型数据库的思维差别,致使应用程序与关系数据库存在一定的交互障碍,ORM作为面向对象的应用程序与关系型数据库间的交互中介桥梁,解决了开发中编码问题,使用开发人员能用使用面向对象的思维去处理和操作关系库。
2 JPA状态表述
在JPA规范中,实体状态的变化都是通过EntityManager接口下的相关函数的被调用而触发的,一个实体从对象变成数据库表中的一条记录,一共可经历4个状态,分别是:新建状态(New)、游离状态(Detached)、受控状态(Managed)、删除状态(Removed)。
新建状态:当一个实体对象刚刚通过new创建出来,还未和其他持久化机制发生任何关联,这时这个实体的实例处于新建状态。
游离状态:当实体对象已经从持久化机制中得到唯一主键,但实例未与持久化机制发生关联关系,则此时对象处于游离状态,当通过EntityManager接口调用clear()方法,实例对象进入游离状态。
受控状态:实体对象已经从持久化机制中得到唯一主键,且已经与持久化机制发生关联关系,则对象处于受控状态,当通过EntityManager接口调用persist()方法,实例对象进入游离状态。
删除状态:如果一个实体对象满足受控的基本要求,即处于受控状态,此时将对象删除,则对象进入删除状态,当通过EntityManager接口调用remove()方法,实例对象到达删除状态。
3 JPA关系实体表述
JPA作为持久化的操作规范,其对应用程序中实体间的关系作了明确的定义,共分三大类型,分别是:一对一(one to one)、一对多(one to many)、多对多(many to many),接下来以Hibernate框架的JPA实现为载体来进行各种实体关系的分析。
一对一:就是两个实体间,一方实体的任一实例只能对应于另一方实体唯一的实例。在日常生活中,例如个人与身份证号码的关系,每个人都有唯一的一个身份证号码,同时每个身份证号码都只能属于某一个人。
具体实现需要在每个实体中引入对方实体作为本类的一个全局属性。如需要在用户(Person)类中引入对方:private Idcard idcard;同时需要在身份证(Idcard)类引对方:private Person person。还要在XML文件做相应的设置,在Person实体的映射文件中加入:<one-to-one name="idcard" />;在Idcard实体的映射文件中加入:<one-to-one name="person" constrained="true" />。
一对多:就是两个实体之间,一方实体的一个实例可以在另一实体中找到若干个与之对应的实例,但另一方实体的一个实例却只能对应对方实体的一个实例。例如,在一个家庭中一对父母親可以生育多个子女,但每个子女却都只能有一对父母亲。
在具体实现中,需要在代表一方的父母实体 (Father) 类中引入一个Set集合属性:private Set sons = new HashSet(0),作为与多方的关联属性;同时需要在代表多方的子女实体 (Son) 类中引入一个Father类型属性:private Father father。最后需要在Father实体映射文件中配置:<set name="sons"><one-to-many class="com.one2many.Son" /></set>;并在Son实体映射文件中配置:<many-to-one name="course" class="com.one2many.Father"><column name="courseId" /></many-to-one>。 多对多:就是两个实体之间,一方实体的一个实例可以在另一方实例中找到若干个与之对应的实例,另一方实体的一个实例也可以在己方实体中找到若干个与之相对应的实例。例如,银行与客户的关系,一家银行可以有众多的客户;反过来,一个客户可以在多家银行开立账户。
在具体实现中,需要把多对多的两个实体,转化为一对多的实体关系进行处理,在两个实体间增加一个桥表实体即可实现以上关系的转化。如在上面的银行与客户的关系实体中,增加一个银行-客户关系实体,作为银行与客户之间的中间桥接实体,两个实体的多对多关系就转化为3个实体间一对多的关系,如图1所示,最后具体的实现方案按一对多的关系处理即可。
4 JPQL语句
JPQL即Java持久化查询语言(Java Persistence Query Language),是专门针对JPA规范而定义的一种面向对象的查询语句,类似于SQL语句,但与原生态的SQL语句有着本质的区别。
原生态SQL语句只能在特定类型的数据库服务器中执行,所写的语句不可在不同类型的数据库中直接移植,如针对MySQL数据库所写原生态SQL语句脚本不能直接在ORACLE数据库上执行。
JPQL语句则是一种可移植面向对象应用程序的操作语句,其所写的语句不直接耦合底层数据库,在应用程序执行时,JPQL语句会被JVM根据不同的数据库类型上最终会解释成不同SQL操作语句,因而其可以实现在不同类型的数据库之间无障碍的移植。
5 结语
JPA是Java EE5后的一个新标准,其是对EJB继承与改进,在主流的三层架构体系中都提供了对JPA标准的支持,Spring2开始支持JPA,Hibernate也是JPA的一种实现方式,Spring+JPA已经成为目前软件工程企业级开发平台的主流搭配方案,随着规范与技术的成熟,JPA会有更加广阔的前景。
参考文献
[1] 欧黎源,邱会中,白亚茹.基于JPA的数据持久化模型设计与实现[J].计算机工程,2009(20):76-77,80.
[2] 谭莹宇.基于Hibernate JPA和JQuery框架的数据查询研究与实现[J].计算机与现代化,2012(1):196-198.
[3] 陳道远.基于JPA规范的通用泛型DAO模式研究[J].软件导刊,2016(12):11-13.
[4] 黄演锋,罗琪.基于JPA技术的面向对象程序设计课程网络教学平台服务器程序设计与实现[J].数字技术与应用,2015(3):141,143.
[5] 胡洁萍,杨树林.JPA与SSH架构整合方案及应用研究[J].北京印刷学院学报,2012(6):50-52.