复合主键

指多个主键联合形成一个主键组合

需求产生

比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示

ddl语句

同复合主键-2个@Id一样

Airline

package com.jege.jpa.composite;import java.io.Serializable;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;/*** @author JE哥* @email 1272434821@qq.com* @description:复合主键-2个@Id+@IdClass*/
@Entity
@Table(name = "t_airline")
@IdClass(Airline.AirlinePK.class)
public class Airline {@Idprivate String startCity;@Idprivate String endCity;private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getStartCity() {return startCity;}public void setStartCity(String startCity) {this.startCity = startCity;}public String getEndCity() {return endCity;}public void setEndCity(String endCity) {this.endCity = endCity;}@Overridepublic String toString() {return "Airline [startCity=" + startCity + ", endCity=" + endCity + ", name=" + name + "]";}// 必须static的classpublic static class AirlinePK implements Serializable {private static final long serialVersionUID = -7189167162738318201L;@Column(length = 3, nullable = false)private String startCity;@Column(length = 3, nullable = false)private String endCity;public AirlinePK() {}public AirlinePK(String startCity, String endCity) {this.startCity = startCity;this.endCity = endCity;}public String getStartCity() {return startCity;}public void setStartCity(String startCity) {this.startCity = startCity;}public String getEndCity() {return endCity;}public void setEndCity(String endCity) {this.endCity = endCity;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic String toString() {return "AirlinePK [startCity=" + startCity + ", endCity=" + endCity + "]";}}}

MainTest

package com.jege.jpa.composite;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;import com.jege.jpa.composite.Airline.AirlinePK;/*** @author JE哥* @email 1272434821@qq.com* @description:复合主键-2个@Id+@IdClass测试*/
public class MainTest {private static EntityManagerFactory entityManagerFactory = null;private EntityManager entityManager = null;@BeforeClasspublic static void setUpBeforeClass() throws Exception {entityManagerFactory = Persistence.createEntityManagerFactory("com.jege.jpa");}@Beforepublic void setUp() throws Exception {entityManager = entityManagerFactory.createEntityManager();}@Testpublic void persist() {Airline airline = new Airline();airline.setEndCity("SHA");airline.setStartCity("PEK");airline.setName("北京飞上海");entityManager.getTransaction().begin();entityManager.persist(airline);entityManager.getTransaction().commit();}@Testpublic void find() {persist();AirlinePK pk = new AirlinePK("PEK", "SHA");Airline airline = entityManager.find(Airline.class, pk);System.out.println(airline);}@Afterpublic void tearDown() throws Exception {if (entityManager != null && entityManager.isOpen())entityManager.close();}@AfterClasspublic static void tearDownAfterClass() throws Exception {if (entityManagerFactory != null && entityManagerFactory.isOpen())entityManagerFactory.close();}
}

其他关联项目

  • JPA 系列教程11-复合主键-2个@Id
    http://blog.csdn.net/je_ge/article/details/53678085

源码地址

https://github.com/je-ge/jpa

如果觉得我的文章对您有帮助,请打赏支持。您的支持将鼓励我继续创作!谢谢!

转载于:https://www.cnblogs.com/je-ge/p/6195537.html

JPA 系列教程12-复合主键-2个@Id+@IdClass相关推荐

  1. JPA之使用复合主键

    文章目录 1. 目标 2. 数据库设计 3. Entity 定义 4. 使用 5. 源码 1. 目标 在设计数据库表的时候,有时候不想定义没有意义的Id作为主键,就可以使用复合主键.这个时候使用JPA ...

  2. java 复合主键,Spring Data Jpa 复合主键的实现

    前言 这次大创有个需求,在数据库建表时发现,user表与project表的关系表 user_project的主键为复合主键: CREATE TABLE user_project( user_id IN ...

  3. Hibernate复合主键映射

    目录: 1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用 在日常开发中会遇到这样一种情况,数据库中的某张 ...

  4. springboot jpa 复合主键 联合主键

    为什么80%的码农都做不了架构师?>>>    在开发中,数据库中定义了一个复合主键,这时候在映射不稍微处理下会有一点问题.什么does not define an IdClass错 ...

  5. JPA复合主键的使用

    背景 人员信息和组信息的关联表中使用的USER_ID_和GROUP_ID_的联合主键,在维护组人员信息的时候,发现JPA打印的SQL只根据USER_ID_作为条件来更新数据,当B组存在zhangsan ...

  6. SpringData JPA复合主键

    一.JPA和复合主键的简介        JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系, ...

  7. 数据库原理与应用(SQL Server)教程 主键、外键以及联合主键、复合主键和设置种子数目和增量

    文章目录 前言 一.主键.联合主键和复合主键 (一)主键 (二)联合主键 (三)复合主键 二.外键.设置种子数目和增量 (一)外键的概念 (二)添加外键 (三)设置种子数目和增量 结语 前言 这篇文章 ...

  8. JPA 系列教程3-单向多对一

    JPA中的@ManyToOne 主要属性 - name(必需): 设定"many"方所包含的"one"方所对应的持久化类的属性名 - column(可选): 设 ...

  9. JPA 系列教程21-JPA2.0-@MapKeyColumn

    @MapKeyColumn 用@JoinColumn注解和@MapKeyColumn处理一对多关系 ddl语句 CREATE TABLE `t_employee` (`id` bigint(20) N ...

最新文章

  1. LiveVideoStack 2021招聘季
  2. redis服务器防止入侵,加ip,密码限制
  3. 爬虫神器:一条命令下载《复仇者联盟3:无限战争》
  4. 前端开发需要掌握什么技术,成为一个高薪的web前端程序员很难吗?
  5. 计算机图形学大几学的,计算机图形学大作业-WenhaoYu.PDF
  6. 使用HTML搭建知识库,TiddlyWiki 快速入门教程,尝试搭建个人知识库
  7. win10查询计算机ip和用户名和密码,Win10系统查询计算机IP子网掩码和默认网关设置教程...
  8. C#使用IHttpModule接口修改http输出的方法浅谈
  9. 索尼便携式无线服务器,WF-SP900体验报告:2018索尼真无线产品中的顶端存在
  10. Android修改开机动画
  11. 火狐上如何使用谷歌翻译插件_将Google翻译功能添加到Firefox
  12. 绕过CDN查找网站真实IP
  13. 服务器linux杀网页木马,一次Linux服务器木马查杀经历
  14. 解决安卓手机卡顿的七个技巧
  15. 如何设置交易滑点?精确到tick 测算期货冲击成本(附源码)
  16. BiSeNet V2网络结构详解
  17. java集合类深度解析
  18. wpf中textblock竖立显示文本
  19. JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. html如何设置打印样式?

热门文章

  1. PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解
  2. winform控件的学习
  3. 20-50k,杭州小影科技社招
  4. 自监督学习在CV领域研究进展总结
  5. mAP提升40%!YOLO3改进版—— Poly-YOLO:更快,更精确的检测和实例分割
  6. 厉害了!谷歌新发布的半监督学习算法降低4倍错误率
  7. 零基础想学Python,明白这2点,越快年薪30W
  8. 百万年薪大佬熬夜写作,Python高级编程之反爬虫及应对方案
  9. 你可能没听过的11个Python库,你有认识的吗?
  10. matlab中ga函数用法,matlab遗传算法ga函数