当前位置: 首页 > news >正文

第二百五十五节 JPA教程 - JPA 多对多连接表示例

JPA教程 - JPA 多对多连接表示例

以下代码显示如何为多对多映射设置连接表。

例子

下面的代码来自PersonDaoImpl.java。

package cn.w3cschool.common;import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import org.springframework.transaction.annotation.Transactional;@Transactional
public class PersonDaoImpl {public void test(){Department d1 = new Department();d1.setName("Design");Department d2 = new Department();d2.setName("Testing");Person p1 = new Person("Tom");p1.getDepartments().add(d1);p1.getDepartments().add(d2);Person p2 = new Person("Jack");p2.getDepartments().add(d1);p2.getDepartments().add(d2);d1.getPersons().add(p1);d1.getPersons().add(p2);em.persist(p1);em.persist(p2);em.persist(d1);em.persist(d2);}@PersistenceContextprivate EntityManager em;
}

下面的代码来自Person.java。

package cn.w3cschool.common;
import java.util.HashSet;
import java.util.Set;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;@Entity
public class Person {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private long id;private String name;@ManyToMany@JoinTable(name="PERSON_DEPT", joinColumns=@JoinColumn(name="PERSON_ID"),inverseJoinColumns=@JoinColumn(name="DEPT_ID"))private Set<Department> departments = new HashSet<Department>();public Person() {}public Person(String name) {this.name = name;}public Set<Department> getDepartments() {return departments;}public void setDepartments(Set<Department> departments) {this.departments = departments;}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;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", departments="+ departments + "]";}}

下面的代码来自Department.java。

package cn.w3cschool.common;import java.util.HashSet;
import java.util.Set;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;@Entity
public class Department implements java.io.Serializable{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private long id;private String name;@ManyToManyprivate Set<Person> persons = new HashSet<Person>();public Set<Person> getPersons() {return persons;}public void setPersons(Set<Person> persons) {this.persons = persons;}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;}@Overridepublic String toString() {return "Department [id=" + id + ", name=" + name + ", persons=" + persons+ "]";}}

以下是数据库转储。

Table Name: DEPARTMENTRow:Column Name: ID,Column Type: BIGINT:Column Value: 1Column Name: NAME,Column Type: VARCHAR:Column Value: DesignRow:Column Name: ID,Column Type: BIGINT:Column Value: 2Column Name: NAME,Column Type: VARCHAR:Column Value: TestingTable Name: DEPARTMENT_PERSONRow:Column Name: DEPARTMENT_ID,Column Type: BIGINT:Column Value: 1Column Name: PERSONS_ID,Column Type: BIGINT:Column Value: 1Row:Column Name: DEPARTMENT_ID,Column Type: BIGINT:Column Value: 1Column Name: PERSONS_ID,Column Type: BIGINT:Column Value: 2Table Name: PERSONRow:Column Name: ID,Column Type: BIGINT:Column Value: 1Column Name: NAME,Column Type: VARCHAR:Column Value: TomRow:Column Name: ID,Column Type: BIGINT:Column Value: 2Column Name: NAME,Column Type: VARCHAR:Column Value: JackTable Name: PERSON_DEPTRow:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 1Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 1Row:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 1Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 2Row:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 2Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 1Row:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 2Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 2


 

相关文章:

  • Springboot + netty + rabbitmq + myBatis
  • C++冷门知识点1
  • jeesite集成redis,redis工具类
  • Iptables,ufw,firewalld的关系与区别
  • 鸿蒙界面开发(九):列表布局 (List)
  • XSS | DOM 型 XSS 攻击
  • 828华为云征文|Flexus云服务器X实例实践:部署2048网页小游戏
  • 基于单片机的小车行走加温湿度检测系统
  • 尚硅谷----智尚代驾项目----Day7(续)------预估乘客订单数据之Drools
  • 第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)
  • ROS与无人驾驶学习笔记(一)——ROS基本操作
  • KRTS虚拟网络适配器和 Windows 连接
  • 相机、镜头参数详解以及相关计算公式
  • 2024 Python3.10 系统入门+进阶(十六):正则表达式
  • Eureka原理实践:构建高可用、可扩展的微服务架构
  • 11111111
  • 2019.2.20 c++ 知识梳理
  • 4个实用的微服务测试策略
  • dva中组件的懒加载
  • extjs4学习之配置
  • golang中接口赋值与方法集
  • Linux CTF 逆向入门
  • Linux下的乱码问题
  • Mybatis初体验
  • python 装饰器(一)
  • React16时代,该用什么姿势写 React ?
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • windows下使用nginx调试简介
  • 构建工具 - 收藏集 - 掘金
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 什么软件可以剪辑音乐?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 数组的操作
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一起参Ember.js讨论、问答社区。
  • 06-01 点餐小程序前台界面搭建
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​什么是bug?bug的源头在哪里?
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)STL算法之遍历容器
  • (20)docke容器
  • (day6) 319. 灯泡开关
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (十一)c52学习之旅-动态数码管
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .NET C# 配置 Options
  • .NET Framework杂记
  • .NET 漏洞分析 | 某ERP系统存在SQL注入