JPA--联合主键
联合主键的一些知识:
使用@EmbeddedId标示联合主键;
在联合主键类中只是定义确定联合主键的字段即可;
* 联合主键类的规则
* 1.必须包含一个无参的构造函数
* 2.必须实现序列化接口
* 3.必须重写hashCode和equals方法,而且equals方法的参数必须包括确定联合主键的所有字段
联合主键类的定义:
package com.yl.demo1.bean.JointPK; import java.io.Serializable; import javax.persistence.Column;
import javax.persistence.Embeddable; /**
* 在联合主键类中只是定义确定联合主键的字段即可
* 联合主键类的规则
* 1.必须包含一个无参的构造函数
* 2.必须实现序列化接口
* 3.必须重写hashCode和equals方法,而且equals方法的参数必须包括确定联合主键的所有字段
* @author yul
*
*@Embeddable--告诉其它类,在使用AieLinePK时只是使用AieLinePK的属性作为实体的持久化属性
*/ @Embeddable //嵌入
public class AirLinePK implements Serializable {
private String startCity;//航空中每个城市都有一个三位的字母标识符
private String endCity; public AirLinePK(){} public AirLinePK(String startCity, String endCity) {
this.startCity = startCity;
this.endCity = endCity;
}
@Column(length=3)
public String getStartCity() {
return startCity;
}
public void setStartCity(String startCity) {
this.startCity = startCity;
}
@Column(length=3)
public String getEndCity() {
return endCity;
}
public void setEndCity(String endCity) {
this.endCity = endCity;
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((endCity == null) ? 0 : endCity.hashCode());
result = prime * result
+ ((startCity == null) ? 0 : startCity.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AirLinePK other = (AirLinePK) obj;
if (endCity == null) {
if (other.endCity != null)
return false;
} else if (!endCity.equals(other.endCity))
return false;
if (startCity == null) {
if (other.startCity != null)
return false;
} else if (!startCity.equals(other.startCity))
return false;
return true;
} }
package com.yl.demo1.bean.JointPK; import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity; @Entity
public class AirLine {
private AirLinePK id;
private String name; public AirLine(){} public AirLine(AirLinePK id) {
this.id = id;
} public AirLine(String startCity, String endCity, String name) {
this.id = new AirLinePK(startCity, endCity);
this.name = name;
} @EmbeddedId
public AirLinePK getId() {
return id;
}
public void setId(AirLinePK id) {
this.id = id;
}
@Column(length=20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }
常用操作:
@Test
public void save() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//事务开始 em.persist(new AirLine("PEK", "SHA", "北京飞上海")); em.getTransaction().commit();
em.close();
factory.close();
}
JPA--联合主键的更多相关文章
- JPA联合主键
联合主键也就是说需要多个字段才能确定数据库记录中的唯一一行.这样就需要多个字段一起,组成主键,也叫联合主键.例如飞机航线,我们需要知道飞机起飞的地点以及飞机降落的地点.所以需要飞机起飞的地点和降落的地 ...
- JPA联合主键@EmbeddedId使用详解附查询例子
花了2个小时的时间解决这个问题,网上资料太少,记录下 详情看源文件TBicPrmCompute,TBicPrmComputePK package com.isoftstone.core.dom ...
- JPA学习---第十二节:JPA中的联合主键
1.定义实体类,代码如下: (1).将联合主键放到一个类中,代码如下: package learn.jpa.entity; import java.io.Serializable; import ja ...
- JPA注解实现联合主键
当表中一个主键不能唯一标识一条记录的时候,就需要使用联合主键了,下面是使用JPA注解实现联合主键的代码 1 首先需要建立一个复合主键类,用来存放需要生产联合主键的属性,该类需要实现序列化. packa ...
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- hibernate 注解 联合主键映射
联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...
- SQL联合主键 查重
2014年最后一天,今天在给数据库导入数据的时候,遇到一个问题,就是联合主键去重. 事情是这样的,现有一个表M,我想找个表中导入了许多数据,并需要将字段A(int)和B(int)联合设置为主键. 但是 ...
- Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
- 联合主键用Hibernate注解映射的三种方式
第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主 ...
- EntityFramework中Mapper怎么定义联合主键?
HasKey(m => new { m.StoreId, m.CarTypeId, m.CarLevel}) 用“new {}”联合主键以“,”分隔形式定义
随机推荐
- linux -- 启动时启动服务或者执行命令
运行等级 首先,我们需要知道Linux系统关于运行等级的知识.在不同的linux系统上(例如ubuntu和Fedora)这些数字与和所代表的意义可能不同,但主要的有以下几个: 单用户模式. 多用户模式 ...
- win 7 64位如何安装erdas 9.2
最主要的就是crack包必须包含这三个文件:erdas.exe、license.dat和lmgrd.exe 将这三个文件都复制到C盘安装目录下bin中,其余安装同win 7 32位系统
- PHP webserver 之 soap wsdl
强势插入:http://pan.baidu.com/s/1jG62oKm
- PDF合并
要求:将多个table导出到一个PDF里,然后打印. 问题分析:要求将四个table放一个PDF打印,四个table的列各不相同,第一个是表头,其他三个是列表,列比表头多很多,如果直接生成一个exce ...
- touches获得手指点击的坐标
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObjec ...
- struts2与velocity的整合有两种方式
1.以struts2为主.struts2内置了对velocity的支持,只要在<result name="success"?type="velocity" ...
- 使用maven 命令运行项目
安装好maven3 配置好环境变量后, 输入mvn -v 查看安装是否成功, 然后导入maven项目, 选择import 导入选择Exsting Maven Projects, 接下来就准备运行一下m ...
- Monad学习
这是观看Cousera上的课程<Principles of Reactive Programming>中week1里的Monad一节所做的笔记. What is a Monad? What ...
- Pie Charts
Default pie chart The default pie chart with no options set. Source Code $.plot('#placeholder', da ...
- Topo图
http://blog.csdn.net/youfangyuan/article/details/8367398 http://joshuaxiao.iteye.com/blog/2224120 ht ...