- 浏览: 14455 次
最新评论
JPA中复合主键的映射
2011年07月01日
在航空系统中,航线有出发城市和到达城市复合主键确定 一个航线可以有多个航班 所以航班对航线是多对一的关系。维护端为航班。由于航线的主键为复合主键,在航班类中要引用航线的主键做为外键 该怎么使用呢?下面是用法:
1、创建复合主键类
需要实现序列化接口和重写hashcode和equals方法
Jpa注解的用法见代码吧: package cn.itcast.bean; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Embeddable; @Embeddable public class AirLinePK implements Serializable{//JPA叫它作主键类 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; final 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; } }
2、创建航线类 package cn.itcast.bean; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.OneToMany; @Entity public class AirLine { private AirLinePK id; private Boolean onpp = true; //是否在飞 private Set filghts = new HashSet(); @OneToMany(mappedBy="airLine", cascade=CascadeType.REFRESH) public Set getFilghts() { return filghts; } public void setFilghts(Set filghts) { this.filghts = filghts; } public AirLine(){} public AirLine(AirLinePK id) { this.id = id; } public AirLine(String startcity, String endcity) { this.id = new AirLinePK(startcity, endcity); } @EmbeddedId //复合主键的注解方法 public AirLinePK getId() {//必须实现序列化接口 return id; } public void setId(AirLinePK id) { this.id = id; } @Column(nullable=false) public Boolean getOnoff() { return onpp; } public void setOnoff(Boolean onoff) { this.onpp = onoff; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.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; final AirLine other = (AirLine) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } }
3、航班的代码 package cn.itcast.bean; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; @Entity public class Filght { private String filghtno; private String aircompany; private AirLine airLine; @ManyToOne(cascade=CascadeType.REFRESH, optional=false) @JoinColumns({//设置外键的名称和各自对应的外键类里的属性。想想加入不设置,程序怎么知道谁对应谁呀 @JoinColumn(name="startcity", referencedColumnName="startcity"), @JoinColumn(name="endcity", referencedColumnName="endcity") }) public AirLine getAirLine() { return airLine; } public void setAirLine(AirLine airLine) { this.airLine = airLine; } @Id @Column(length=6) public String getFilghtno() { return filghtno; } public void setFilghtno(String filghtno) { this.filghtno = filghtno; } @Column(length=2) public String getAircompany() { return aircompany; } public void setAircompany(String aircompany) { this.aircompany = aircompany; } }
测试代码 @Test public void save(){ EntityManagerFactory factory = Persistence.createEntityManagerFactory("itcast"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); AirLine airLine = new AirLine("PEK", "CAN"); em.persist(airLine); Filght filght = new Filght(); filght.setFilghtno("CA1002"); filght.setAircompany("CA"); filght.setAirLine(airLine); em.persist(filght); em.getTransaction().commit(); em.close(); factory.close(); }
发表评论
-
TCP长连接服务的Java实现
2012-01-20 00:49 1506TCP长连接服务的Java实现 ... -
Java 开发员AJAX 常见问题
2012-01-20 00:49 601Java 开发员AJAX 常见问题 ... -
Android IPC进程间通讯机制
2012-01-20 00:49 747Android IPC进程间通讯机制 2011年06月17日 ... -
说说IO - IO的分层
2012-01-20 00:49 673说说IO - IO的分层 2011年 ... -
使用 libevent 和 libev 提高网络应用性能
2012-01-20 00:49 1449使用 libevent 和 libev 提 ... -
i9001
2012-01-17 01:07 755i9001 2011年12月13日 一、外观检查,外壳、 ... -
从零开始- Android刷机指南<一>
2012-01-17 01:07 751从零开始- Android刷机指南 2011年07月27日 ... -
接上一篇
2012-01-17 01:07 654接上一篇 2011年04月25日 第 2 章 路由器基 ... -
ARM经典100问
2012-01-17 01:07 810ARM经典100问 2011年03月13日 第1章 体系 ... -
libevent源码深度剖析四
2012-01-15 19:48 632libevent源码深度剖析四 ... -
valgrind结果查看
2012-01-15 19:48 522valgrind结果查看 2011年12月30日 程序示 ... -
给大学生学习ARM和FPGA的建议(转)
2012-01-15 19:48 614给大学生学习ARM和FPGA的 ... -
教大家S40/java所有玩机技巧,喜欢请转载 加QQ657752021学习更多技术
2012-01-15 19:48 859教大家S40/java所有玩机 ... -
【下一页】linux(部分)
2012-01-15 19:48 715【下一页】linux(部分) 2012年01月09日 一 ... -
第2章 saas 成熟度模型-悟空悟道-iteye技术网站
2012-01-11 12:02 536第2章 saas 成熟度模型-悟空悟道-iteye技术网站 ... -
使用 JavaScript 获取 table 行号和列号
2012-01-11 12:02 802使用 JavaScript 获取 table 行号和列号 2 ... -
Extending Ext
2012-01-11 12:02 603Extending Ext 2011年07月01日 fr ... -
ReflectionUtils
2012-01-11 12:02 677ReflectionUtils 2011年07月01日 ...
相关推荐
jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第15讲 JPA中的联合主键.avi
主要介绍了Spring Data Jpa 复合主键的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
NULL 博文链接:https://1028826685.iteye.com/blog/1525788
JPA JAPJPA JAPJPA JAPJPA JAPJPA JAPJPA JAPJPA JAPJPA JAPJPA JAPJPA JAP
15_传智播客JPA详解_JPA中的联合主键.rar
JPA映射关系,多种映射关系的图解,适合EJB初学者,对JPA映射关系的了解.
04_JPA详解_第一个JPA实例与JPA主键生成策略.zip
NULL 博文链接:https://profound-accumulation.iteye.com/blog/2242299
本文档简单描述了注解实现联合主键类的生成
第一个就是简单的单字段主键类型,一个就是复杂的复合主键类型。我们分2种情况分别讨论。 第一种单字段主键类型,看上去简单,无非就是一个id字段呗,实际上这个主键字段在JPA,还有任何的ORM框架中都是有很多种生成...
jpa复杂查询,映射到具体的DTO上就比较复杂,需要类型完全匹配,还要求要建造构造函数,而且只能使用jpql查询,非常麻烦,querydsl也不方便,代码太长,后期维护的时候看上去也不直观。复杂sql还是采用原生sql比较...
15_JPA详解_JPA中的联合主键.zip 15_JPA详解_JPA中的联合主键.zip
只要1分就可获得JPA主键生成策略,很全的哦
刚学完了hibernate和ejb,自己又自学了下jpa,看了黎活明老师的视频,自己做了个多对多的例子,希望可以对你学习有所帮助,有心人可以联系我QQ770256061!
04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略
JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射
本资源为原创. 其中剖析了hibernate+JPA对主键的生成方式的分类,以及在真实项目中如何使用,并且剖析各种数据库间的主键序列(sequence)原理以及使用.
使用jpa映射关联和继承
JPA 联合主键实例 博文链接:https://zmx.iteye.com/blog/512468