9、JPA-映射-双向多对多
Category
import lombok.Getter;
import lombok.Setter;
import lombok.ToString; import javax.persistence.*;
import java.util.HashSet;
import java.util.Set; @Setter
@Getter
@ToString
@Entity
@Table(name = "ManyToMany_CATEGORIES")
public class Category { @Id
@GeneratedValue
private Integer id; @Column(name = "CATEGORY_NAME")
private String categoryName; @ManyToMany(mappedBy = "categories")
private Set<Item> items = new HashSet<>();
}
Item
import lombok.Data; import javax.persistence.*;
import java.util.HashSet;
import java.util.Set; @Data
@Entity
@Table(name = "ManyToMany_ITEMS")
public class Item { @Id
@GeneratedValue
private Integer id; @Column(name = "ITEM_NAME")
private String itemName; // 使用 @ManyToMany 注解来映射多对多关联关系
// 使用 @JoinTable 来映射中间表
// 1. name 中间表的名字
// 2. joinColumns 映射当前类所在的表在中间表中的外键
// 2.1 name 指定外键列的列名
// 2.2 referencedColumnName 指定外键列关联当前表的哪一列
// 3. inverseJoinColumns 映射关联的类所在中间表的外键
@JoinTable(name = "ManyToMany_ITEM_CATEGORY",
joinColumns = {@JoinColumn(name = "ITEM_ID", referencedColumnName = "ID")},
inverseJoinColumns = {@JoinColumn(name = "CATEGORY_ID", referencedColumnName = "ID")})
@ManyToMany
private Set<Category> categories = new HashSet<>();
}
测试
添加
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence; public class JPAyingshe {
private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;
private EntityTransaction transaction; @Before
public void init() {
entityManagerFactory = Persistence.createEntityManagerFactory("jpaname");
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();
transaction.begin();
} @After
public void destroy() {
transaction.commit();
entityManager.close();
entityManagerFactory.close();
} @Test
public void testManyToManyPersist() {
Item i1 = new Item();
i1.setItemName("i-1"); Item i2 = new Item();
i2.setItemName("i-2"); Category c1 = new Category();
c1.setCategoryName("C-1"); Category c2 = new Category();
c2.setCategoryName("C-2"); //设置关联关系
i1.getCategories().add(c1);
i1.getCategories().add(c2); i2.getCategories().add(c1);
i2.getCategories().add(c2); c1.getItems().add(i1);
c1.getItems().add(i2); c2.getItems().add(i1);
c2.getItems().add(i2); //执行保存
entityManager.persist(i1);
entityManager.persist(i2);
entityManager.persist(c1);
entityManager.persist(c2);
}
}
查询
// 对于关联的集合对象, 默认使用懒加载的策略
// 使用维护关联关系的一方获取, 还是使用不维护关联关系的一方获取, SQL 语句相同
@Test
public void testManyToManyFind(){
Item item = entityManager.find(Item.class, 36);
System.out.println(item.getItemName()); System.out.println(item.getCategories().size());
}
通过另一边查询
@Test
public void testManyToManyFind(){
Category category = entityManager.find(Category.class, 38);
System.out.println(category.getCategoryName());
System.out.println(category.getItems().size());
}
9、JPA-映射-双向多对多的更多相关文章
- JPA(七):映射关联关系------映射双向多对一的关联关系
映射双向多对一的关联关系 修改Customer.java package com.dx.jpa.singlemanytoone; import java.util.Date; import java. ...
- 10、JPA_映射双向多对多的关联关系
双向多对多的关联关系 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也有对A的集合的引用.A.B两个实体对应的数据表靠一张中间表来建立连接关系. 同时我们还知道,双向多对 ...
- JPA_映射双向多对多的关联关系(转)
双向多对多的关联关系 转自(http://www.cnblogs.com/lj95801/p/5011537.html) 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也 ...
- JPA 映射单向多对一的关联关系
1.首先在多的一端加入一的一端的实体类 //映射单向n-1的关联关 //使用@ManyToOne 来映射多对一的关系 //使用@JoinColumn 来映射外键/可以使用@ManyToOne的fetc ...
- JPA中实现双向多对多的关联关系(附代码下载)
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- hibernate(四) 双向多对多映射关系
序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...
- Hibernate框架之双向多对多关系映射
昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...
- Hibernate框架双向多对多关联映射关系
建立双向多对多关联关系 Project.java (项目表) private Integer proid; private Strin ...
- 017 多对多关联映射 双向(many-to-many)
多对多关联映射 双向 两方都持有对象引用,修改对象模型,但数据的存储没有变化. 再修改映射文件: public class Role { private int id; private String ...
- JPA学习笔记(8)——映射双向一对多关联关系
双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...
随机推荐
- log4php的使用方法与详细配置
log4php的使用 首先引入logger.php文件.log4php可以通过引入logger.php来完成自动加载的过程.文件位置如下: 日志记录器自身没有定义日志的输出目的地和格式,所以我们通常需 ...
- FileUtils功能概述
https://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/FileUtils.ht ...
- Eclipse:An internal error occurred during: "Building workspace". GC overhead limit exceeded
http://blog.csdn.net/shaozhang872196/article/details/18552273 http://www.cnblogs.com/sonofelice/p/52 ...
- Using svn in CLI with Batch
del %~n0.txt@echo offsetlocal EnableDelayedExpansionfor /f "delims=" %%i in ('DIR /A:D /B' ...
- Linux大页内存管理等---菜鸟初学
1. 查看linux的内存情况: free -m 2. 查看是否开启大页的方法: cat /proc/meminfo |grep -i HugePage AnonHugePages: 276480 k ...
- PRML读书笔记_绪论
一.基本名词 泛化(generalization) 训练集所训练的模型对新数据的适用程度. 监督学习(supervised learning) 训练数据的样本包含输入向量以及对应的目标向量. 分类( ...
- Linux下OSG的编译和安装以及遇到的问题
(第一段日常扯蛋,大家不要看)由于我们教研室所做的RTMapper要用到GDAL,所以就打算看osgearth的源码来熟悉下GDAL库的使用,同时也了解下osgearth中关于带有高程的图像拼接.然而 ...
- React 表单refs
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- pandas数据统计
1 count() 非空观测数量 2 sum() 所有值之和 3 mean() 所有值的平均值 4 median() 所有值的中位数 5 mode() 值的模值 6 std() 值的标准偏差 7 mi ...
- Linux 下统计Apache每分钟的并发数
脚本非常简单,不清楚原理,逐行运行即可. 使用时将脚本复制到home目录,并添加执行权限.定时任务即可. 代码内容如下: #!/bin/sh date >> /home/date-time ...