@MapKeyColumn

用@JoinColumn注解和@MapKeyColumn处理一对多关系

ddl语句

CREATE TABLE `t_employee` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;CREATE TABLE `t_employee_map` (`Employee_id` bigint(20) NOT NULL,`emp_value` varchar(255) DEFAULT NULL,`emp_key` varchar(255) NOT NULL,PRIMARY KEY (`Employee_id`,`emp_key`),CONSTRAINT `FK_k06nikcsc4pc9oasboix6uagw` FOREIGN KEY (`Employee_id`) REFERENCES `t_employee` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Employee

package com.jege.jpa;import java.util.HashMap;
import java.util.Map;import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MapKeyColumn;
import javax.persistence.Table;/*** @author JE哥* @email 1272434821@qq.com* @description:pojo模型*/
@Entity
@Table(name = "t_employee")
public class Employee {@Id@GeneratedValueprivate Long id;private String name;@ElementCollection// 生成的表的主键Map.key+EmployeeMap_id@CollectionTable(name = "t_employee_map")@MapKeyColumn(name = "emp_key")@Column(name = "emp_value")private Map<String, String> others = new HashMap<String, String>();public Employee() {}public Employee(String name) {this.name = name;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Map<String, String> getOthers() {return others;}public void setOthers(Map<String, String> others) {this.others = others;}}

JPA2Test

package com.jege.jpa;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;public class JPA2Test {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();// Session}@Testpublic void persist() throws Exception {Employee employee = new Employee();employee.setName("je-ge");employee.getOthers().put("home", "beijing");employee.getOthers().put("work", "shanghai");entityManager.getTransaction().begin();entityManager.persist(employee);entityManager.getTransaction().commit();}@Testpublic void find() throws Exception {persist();entityManager.clear();Employee employee = entityManager.find(Employee.class, 1L);System.out.println(employee.getName());System.out.println(employee.getOthers());}@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 系列教程20-JPA2.0-@CollectionTable
    http://blog.csdn.net/je_ge/article/details/53998548

源码地址

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

如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡。您的支持将鼓励我继续创作!谢谢!

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

JPA 系列教程21-JPA2.0-@MapKeyColumn相关推荐

  1. JPA 系列教程12-复合主键-2个@Id+@IdClass

    复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 ddl语句 同复合主键-2个@Id一样 Airline p ...

  2. STM32 基础系列教程 21 - NVIC

    前言 学习stm32 NVIC接口编程,学会使用常用的NVIC接口函数,优改中关优先级,开/关单个中断,开/关所有中断,开/关所有中断和异常,系统软件重启等功能. 示例详解 基于硬件平台: STM32 ...

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

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

  4. JPA 系列教程18-自动把firstName+lastName合并为name字段

    需求 设计的国际化网站,页面需要输入firstName,lastName,后台数据库只需要存储name属性. 页面获取的firstName,lastName持久化到数据库name属性,规则按照,分隔保 ...

  5. iView 实战系列教程(21课时)_2.iView 实战教程之导航、路由、鉴权篇

    在c盘创建一个iview-router的项目 . 然后使用默认的配置 跳过 添加vue-router的插件 编译我们的文件. 编译好之后,我们启动App 默认的页面就打开了. 默认两个路由一个是abo ...

  6. go 修改结构体方法_「GCTT 出品」Go 系列教程——26. 结构体取代类

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Go 支持面向对象吗? Go 并不是完全面向对象的编程语言.Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘 ...

  7. go 自定义error怎么判断是否相等_「GCTT 出品」Go 系列教程——30. 错误处理

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Go 系列教程是非常棒的一套初学者教程,入门就它了. 这是 Golang 系列教程中的第 30 篇.在本章教程中,我们 ...

  8. Xilinx MicroBlaze系列教程(适用于ISE和Vivado开发环境)

    本文是Xilinx MicroBlaze系列教程的第0篇文章. 这个系列文章是我个人最近两年使用Xilinx MicroBlaze软核的经验和笔记,以Xilinx ISE 14.7和Spartan-6 ...

  9. 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)

    系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...

最新文章

  1. P1203 [USACO1.1]坏掉的项链Broken Necklace
  2. mac地址信息查询站点
  3. 主业失利,跨界捞金,飞科的算盘能如意吗?
  4. #1066 : 无间道之并查集
  5. define、const、typedef区别
  6. flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)
  7. 基于OPENldap搭建postfix 虚拟用户
  8. 微软发布Visual Studio 2010 SP1公测版
  9. 配置文件编辑和历史文件编辑代码
  10. linux免费私人云盘软件,Appnode+kodexplorer免费搭建私有云盘
  11. 海思和展讯给中国芯片业界带来信心和希望,或成为下一个芯片巨头
  12. 痞子衡嵌入式:MCUXpresso Config Tools初体验(Pins, Clocks, Peripherals)
  13. 全网最强红黑树的理解和实现
  14. SVN报错The working copy needs to be upgraded
  15. 微软与GitHub百人签名,力挺996.ICU项目
  16. 轻松玩转“项目管理” 群硕软件PMS正式发布
  17. 如何计算根号之牛顿迭代法
  18. 比赛的心得和感想--邱波
  19. 什么是超融合一体机?与超融合服务器是一回事吗?
  20. 看懂相控阵雷达工作原理及类型简介

热门文章

  1. iso图像测试卡_4700万像素 五轴防抖 徕卡正式发布SL2无反相机
  2. Shiro————核心设计思想
  3. XML学习(一)————XML简介
  4. Java工具方法——属性拷贝方法:BeanUtils.copyProperties(Object, Object)
  5. python 对比文件内容差异_使用Python来比较文件夹并提取差异部分
  6. oracle脱机什么意思,脱机的是什么意思
  7. java中删除最大的数,【Java练习】删除字符串中字符个数最少的字符
  8. java怎么碰到异常跳过继续执行_Java异常处理很难吗?BAT大厂的架构师是怎么处理Java异常的?...
  9. hql 查询条件 set集合_Redis从入门到深入-Sorted_set的value
  10. log解析工具 px4_console.log(console.log) = ?