【Java 】--jpa中继承的实现

原创 2017年10月15日 22:09:18

JPA中对象关系映射通常情况下是一个实体对应一个表,两个实体之间没有任何关系。如果两个实体之间是继承关系,那么该如何映射呢?


JPA中的实体支持继承映射,多态关联,多态查询。抽象类和具体的类都可以是实体,且都可以使用@Entity来注解,映射成实体,并查询封装成一个实体。实体类可以继承非实体类,非实体类也可以继承实体类。

JPA的继承映射有如下几种情况:

一、实体类继承抽象(具体)实体类
抽象类可以指定成为一个实体,抽象实体和具体实体的唯一区别只是抽象实体不能够被直接实例化。抽象实体能够被映射成一个实体并能够作为查询目标。
抽象实体类使用@Entity注解或在XML描述符表示成一个实体。

这种映射相对复杂,后面会专门写一篇文章来举例说明。这里就不再多说。

二、实体类继承映射超类(Mapped Superclasses)
实体可以继承自一个超类,这个超类提供了持久化实体状态(即属性或字段)和映射信息,但它本身不是一个实体。通常情况下,这种超类映射的的目的是定义多个实体共有的状态和映射信息。
映射超类和实体不一样,它不能够被查询,所以不能作为参数传递给EntityManager或Query 接口进行操作。映射超类定义的持久化关系必须是单向的。
抽象类或具体的类都可以作为映射超类,使用@MappedSuperclass注解(或mapped-superclass XML描述符元素)来指定映射超类。
映射超类不会生成单独的表,它的映射信息作用于继承自它的实体类。

映射超类能够像实体类一样被映射,只是它的映射将作用于继承自它的实体类,因为它本身不存在单独的表。当作用于子类时,继承的映射信息将作用于子类对应的表上。子类可以通过@AttributeOverride和AssociationOverride注解或对应的XML描述符元素来覆盖映射超类的映射信息。下面来看一个实例:

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java JPA项目的一个小模块实现

  • 2014年08月04日 13:33
  • 26.56MB
  • 下载

基于james3.0 的邮件系统(struts2.3.2 +spring3.0.1+jpa(hibernate3.6.5)实现)b/s模式--java邮件系统

米林(ljg)邮箱使用说明 java邮件系统 系统源代码下载地址:http://download.csdn.net/detail/afgasdg/3681707 系统整体下载地址(包含源代码,邮件服...
  • afgasdg
  • afgasdg
  • 2011年08月21日 18:43
  • 23493

基于james3.0 的邮件系统(struts2.3.2 +spring3.0.1+jpa(hibernate3.6.5)实现)b/s模式--java邮件系统 .

米林(ljg)邮箱使用说明 java邮件系统 系统源代码下载地址:http://download.csdn.net/detail/afgasdg/3681707 系统整体下载地址(包含源代码,...

Java利用JPA规范,实现实体关系解析,类似hibernate

实体对象: Product.java package com.pan.beans; import javax.persistence.Column; import javax.persist...

通过 Hibernate 实现 JPA 对象关系模型之继承映射策略

Single-table 策略:这是继承映射中的缺省策略,在不特别指明的情况下,系统默认就是采用这种映射策略进行映射的。这个策略的映射原则就是父类包括子类中新添加的属性全部映射到一张数据库表中,数据库...

JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)

发表于19小时前| 1809次阅读| 来源CSDN| 5 条评论| 作者张勇大数据移动移动互联网摘要:自从人类进入互联网时代后,这个世界就充斥着数据。随着移动、社交、可穿戴设备和物联网发展,未来数据呈...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java 】--jpa中继承的实现
举报原因:
原因补充:

(最多只允许输入30个字)