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-映射-双向多对多的更多相关文章

  1. JPA(七):映射关联关系------映射双向多对一的关联关系

    映射双向多对一的关联关系 修改Customer.java package com.dx.jpa.singlemanytoone; import java.util.Date; import java. ...

  2. 10、JPA_映射双向多对多的关联关系

    双向多对多的关联关系 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也有对A的集合的引用.A.B两个实体对应的数据表靠一张中间表来建立连接关系. 同时我们还知道,双向多对 ...

  3. JPA_映射双向多对多的关联关系(转)

    双向多对多的关联关系 转自(http://www.cnblogs.com/lj95801/p/5011537.html) 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也 ...

  4. JPA 映射单向多对一的关联关系

    1.首先在多的一端加入一的一端的实体类 //映射单向n-1的关联关 //使用@ManyToOne 来映射多对一的关系 //使用@JoinColumn 来映射外键/可以使用@ManyToOne的fetc ...

  5. JPA中实现双向多对多的关联关系(附代码下载)

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  6. hibernate(四) 双向多对多映射关系

    序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...

  7. Hibernate框架之双向多对多关系映射

    昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...

  8. Hibernate框架双向多对多关联映射关系

    建立双向多对多关联关系    Project.java (项目表)                private Integer proid;                private Strin ...

  9. 017 多对多关联映射 双向(many-to-many)

    多对多关联映射 双向 两方都持有对象引用,修改对象模型,但数据的存储没有变化. 再修改映射文件: public class Role { private int id; private String ...

  10. JPA学习笔记(8)——映射双向一对多关联关系

    双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...

随机推荐

  1. Tomcat启动错误一例org.apache.catalina.core.StandardContext resources Start Error starting static Resources

    org.apache.catalina.core.StandardContext resources Start Error starting static Resources 引发原因:Eclips ...

  2. 数组操作方法(包括es5)

    //push(); 定义:可以可向数组的末尾添加一个或更多元素,并返回新的长度. 方法:push(); 语法:数组.push(新元素1,新元素2,....,新元素x) 返回值:把指定的值添加到数组后的 ...

  3. Windows下面dir 总是输入成ls的一个解决方法

    转帖:http://blog.csdn.net/venusic/article/details/50543058 新建一个ls.bat文件 输入 @echo off dir 然后放到环境变量存在的一个 ...

  4. 数据类型+内置方法 python学习第六天

    元组 用途:不可变的列表,能存多个值,但多个值只有取的需求而没有改的需求. 定义方式:在()内用逗号分隔开多个元素,可以存放任意类型的值. names=(‘alex’,’blex’,’clex’) 强 ...

  5. 使用TensorFlow实现分类

    这一节使用TF搭建一个简单的神经网络用于分类任务,首先把需要的包引入,另外为了防止在多次运行中一些图中的tensor在内存中影响实验,采取重置操作: import tensorflow as tf i ...

  6. jquery 動畫

    animate({param},speed,callback)/animate({param},speed)/animate({param}) param表示css屬性:屬性名必須是camel標識法: ...

  7. selenium之使用unittest测试框架

    # 测试角色权限管理页面功能 from selenium import webdriver from login_page import LoginPage import random, time, ...

  8. Check failed: status == CUBLAS_STATUS_SUCCESS (11 vs. 0) CUBLAS_STATUS_MAPPING_ERROR

    I0930 21:23:15.115576 30918 solver.cpp:281] Learning Rate Policy: multistepF0930 21:23:17.263314 310 ...

  9. semantic segmentation with deeplearning

    a 2017 guide to semantic segmentation with deep learning paper: http://blog.qure.ai/notes/semantic-s ...

  10. [资源]--IOS捷径大全,众多实用小功能

    一.实用工具 1.支付助手3.0(新) (扫一扫.微信扫码.微信收款.支付宝扫码.Apple Pay.AA付款.查快递.蚂蚁森林.蚂蚁庄园.彩票.股票.运动.淘票票.乘车码.生活缴费.火车票等等): ...