关于继承
domain继承的情况不多见,继承主要用于抽出两个实体中相同的部分,其数据库表结构的设计可以有多种方式。
直接通过例子说明好了,现在假设User存在两种:Company和Person,其中id、name、address为公共信息,我们可以抽出一个User类保存。假设Company有CEO、foundedDate、yearIncome等信息,Person有age、sex、birth、income等信息。现在三个domain object类信息如下:
User:
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @DiscriminatorColumn(name = "UserType", discriminatorType = DiscriminatorType.INTEGER, length = 1) @DiscriminatorValue(value = "1") public class User implements Serializable { private static final long serialVersionUID = -4969930054771554775L; @Id @GeneratedValue(strategy = GenerationType.TABLE) @Column(name = "ID") private int id; @Column(name = "Name", length = 50) private String name; @Column(name = "Address") private String address; // getter and setter methods }
Company:
@Entity @DiscriminatorValue(value = "3") public class Company extends User implements Serializable { private static final long serialVersionUID = -4969930054771554775L; @Column(name = "CEO") private char ceo; @Column(name = "FoundedDate") @Temporal(TemporalType.DATE) private Date foundedDate; @Column(name = "YearIncome") private BigDecimal yearIncome; // getter and setter methods }
Person:
@Entity @DiscriminatorValue(value = "2") public class Person extends User implements Serializable { private static final long serialVersionUID = -4969930054771554775L; @Column(name = "Age") private int age; @Column(name = "Sex", length = 1) private char sex; @Column(name = "Birth") @Temporal(TemporalType.DATE) private Date birth; @Column(name = "Income") private BigDecimal income; // getter and setter methods }
数据库表结构就不贴出来了,只要有一张User表,并且所有的列都含有就可以了(注意要有一个int型的UserType列)。
下面对新注解进行下说明:
@Inheritance:标明此实体为一个父类,其数据库映射策略有3种
SINGLE_TABLE:一张表储存(常用),其子类根据@DiscriminatorColumn指定的列和@DiscriminatorValue的值进行区分。如上例中,User表中UserType列的值为2表示Person,3表示Company。
JOINED:相同字段保存在一张表,不同字段单独保存(上例会有三张表),通过表连接查询取得。
TABLE_PER_CLASS:一个类一张表。一样是三张表,不过子表中会保存全部的列(不推荐)。
@DiscriminatorColumn和@DiscriminatorValue:只有在InheritanceType为SINGLE_TABLE时使用,用于指明区分列和值。
修改TestDAO的代码,我们就可以拿出Person和Company了:
如果想看sql,可以在persistence.xml中将Hibernate的show_sql打开,在properties中加入如下属性:
<property name="hibernate.show_sql" value="true"/>
其它常用字段注解
大数据类型(Lob类型):包括CLOB,BLOB等
直接使用@Lob注解,由于大数据的加载可能会影响性能,所以可以懒加载,在@Lob之后使用@Basic(fetch=FetchType.LAZY)即可。
瞬时字段:不希望与数据库映射的字段
直接在字段上加上@Transient注解即可。
表关联:
使用@ManyToOne、@OneToMany、@OneToOne、@ManyToMany等,很重要,以后详细说。
当然,除了注解之外,JPA还可以使用XML进行映射,我个人觉得使用XML还不如单纯的Hibernate效果好,所以就不说了。
相关推荐
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第二章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第9章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第10章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第6章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part5 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第14章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part2 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part3 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part4 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第3章 其他部分详见我的上传列表 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则包含...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第13章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第7章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第5章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第4章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第11,12,15章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;...
**JPA注解详解** Java Persistence API (JPA) 是Java平台上的一个规范,用于管理关系数据库中的对象持久化。JPA提供了丰富的注解来简化对象-关系映射(ORM)的过程。以下是一些关键的JPA注解的详细解释: 1. **@...
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。 JPA的总体思想和现有Hibernate、TopLink、...
《基于LayUI+Spring Boot+MySQL+JPA+Shiro的科研信息管理系统设计与实现》 本项目是一个集成了多种技术的科研信息管理系统,旨在为科研机构提供一个高效、安全的信息管理平台。该系统充分利用了现代Web开发框架和...