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

3 篇文章 0 订阅
1 篇文章 0 订阅

今天开始学学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;

@Entity
public class Vehicle {
	@Id
	int 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  之间有主键的关联,自动生成的表主键似乎无法修改,谁知道了也回复一下啊。  




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


数据库生成如下三张表:








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值