JPA2.0学习笔记---对象/关系映射增强详解

来源:互联网 发布:php 字符串转化二进制 编辑:程序博客网 时间:2024/06/06 00:44

今天开始学学JPA2.0 ~~ 

实体类 

package com.neal.bean.test;import java.util.List;import java.util.Set;import javax.persistence.CollectionTable;import javax.persistence.Column;import javax.persistence.ElementCollection;import javax.persistence.Entity;import javax.persistence.Enumerated;import javax.persistence.Id;import javax.persistence.OrderBy;@Entitypublic class Vehicle {@Idint vin;@ElementCollection@CollectionTable(name = "VEH_OPTNS")@Enumerated()@Column(name = "FEAT")Set<FeatureType> optionalFeatures;@ElementCollection@CollectionTable(name = "VEH_SVC")@OrderBy("serviceDate")List<ServiceVisit> serviceHistory;public enum FeatureType {AC, CRUISE, PWR, BLUETOOTH, TV}}




package com.neal.bean.test;import java.util.Date;import javax.persistence.Column;import javax.persistence.Embeddable;import javax.persistence.Temporal;import javax.persistence.TemporalType;@Embeddable  public class ServiceVisit{   @Temporal(TemporalType.DATE)   @Column(name="SVC_DATE")   Date serviceDate;   String workDesc;   int cost;   }  


数据库生成表都在下面, 一些表名这类的的 大小写就不用太计较了。。哈~  

第一个注解:@Entity 这玩意不用说,对应的表就是  vehicle , @ID生成如下主键 vin这些都是基本的,现在开始下面的注解

@ElementCollection
@CollectionTable(name = "VEH_OPTNS")

个人理解为:这个有点像一对多~~    嵌入 一张表 表名为VEH_OPTNS,对应FeatureType枚举,再生成一张表,用来存放枚举数据,而不是和JPA1 里面用字段来存放枚举数值,VEH_OPTNS中的Vechicle_vin ,根据外键名自动生成。  外键关联到 Vehicle 表中的vin字段 的主键上,也就是以嵌入式的方式生成一个枚举表,不过个人觉得这个样子还不如直接定义枚举,多表查询,速度可想而知。


第二个应该才是嵌入式的该用到的地方了~ 大概也和上面一样,我就不细说了。生成表 VEH_SVC,表内数据其实就是 ServiceVisit 中的内容,之后还是主外键关联。


总结: 其实也就是一对多的变种而已。。  嵌入一些信息,把原先那些枚举这类的也看成为一个对象,用一个表格存储,1.0 的时候就是一个字段而已,更加面向对象了。 两张表与主表Vehicle  之间有主键的关联,自动生成的表主键似乎无法修改,谁知道了也回复一下啊。  




敲完手工。。。 下午继续研究其他特性。


数据库生成如下三张表:








原创粉丝点击