JPA学习笔记-映射双向多对多的关联关系

Category类

@Table(name="jpa_categories")
@Entity
public class Category {
	@GeneratedValue
	@Id
	private Integer id;
	@Column(name="category_name")
	private String categoryName;

	@ManyToMany(mappedBy="categories")
	private Set<Item> items = new HashSet<>();
	//getter setter
}

Item类

@Table(name="jpa_items")
@Entity
public class Item {

	@GeneratedValue
	@Id
	private Integer id;
	@Column(name="item_name")
	private String itemName;
	//中间表,name为中间表的表名,joinColumns当前类在中间表中的外键(name为外键的列名,referencedColumnName当前表的哪一列),
	//inverseJoinColumns映射关联的类所在中间表的外键
	@JoinTable(name="item_category",
			joinColumns={@JoinColumn(name="item_id", referencedColumnName="id")},
			inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id")})
	@ManyToMany
	private Set<Category> categories = new HashSet<>();
	//getter setter
}

测试保存

		@Test
		public void testManyToManyPersistance() {
			Item item1 = new Item();
			item1.setItemName("item1");

			Item item2 = new Item();
			item2.setItemName("item2");

			Category category1 = new Category();
			category1.setCategoryName("category1");

			Category category2 = new Category();
			category2.setCategoryName("category2");

			item1.getCategories().add(category1);
			item1.getCategories().add(category2);

			item2.getCategories().add(category1);
			item2.getCategories().add(category2);

			category1.getItems().add(item1);
			category1.getItems().add(item2);

			category2.getItems().add(item1);
			category2.getItems().add(item2);

			entityManager.persist(item1);
			entityManager.persist(item2);
			entityManager.persist(category1);
			entityManager.persist(category2);
		}

保存结果如下图

测试select

		//默认使用懒加载策略
		//无论先使用维护关联关系的一方获取还是使用不维护关联关系的一方获取,SQL相同
		@Test
		public void testManyToManyFind() {
//			Item item = entityManager.find(Item.class, 1);
//			System.out.println(item.getItemName());
//			System.out.println(item.getCategories().size());
			//上下两种方式SQL语句相同
			Category category = entityManager.find(Category.class, 1);
			System.out.println(category.getCategoryName());
			System.out.println(category.getItems().size());
		}
时间: 2024-10-09 08:30:29

JPA学习笔记-映射双向多对多的关联关系的相关文章

JPA学习笔记-映射单向多对一的关联关系

Customer类 @Table(name="jpa_customer") @Entity public class Customer { @Column(name="id") @GeneratedValue(strategy=GenerationType.AUTO) @Id private Integer id; @Column(name="last_name") private String lastName; private String 

JPA学习笔记-映射双向一对一的关联关系

Manager类 @Table(name="jpa_manager") @Entity public class Manager { @GeneratedValue @Id private Integer id; @Column(name="manager_name") private String managerName; //没有外键的一方,不维护关联关系 // @OneToOne(mappedBy="manager", fetch=Fetc

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

双向多对多的关联关系 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也有对A的集合的引用.A.B两个实体对应的数据表靠一张中间表来建立连接关系. 同时我们还知道,双向多对多的关联关系可以拆分成三张表,两个双向多对一关联关系.拆分以后还是有一张中间表,其好处就是可以在中间表中添加某些属性用作其它.这个后面会讲解.而单纯的双向多对多关联关系的中间表有两个外键列,无法增加其它属性. 本节只讲单纯的双向多对多关联关系.从例子讲解配置方法和原理: 有“商品Item”和“类别C

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

一对多关联关系 本文有很多和多对一是一样的,因此不会写得非常具体. 有看不懂的.能够參考JPA学习笔记(7)--映射多对一关联关系 Order实体类 package com.jpa.helloworld2; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; imp

JPA学习笔记(5)——EntityManager相关

Persistence EntityManagerFactory EntityManager find方法 getReference方法 persist方法 remove方法 merge方法 情况1传入的对象没有id 情况2传入的对象有identityManager的缓存中没有该对象数据库中没有该记录 情况3传入的对象有identityManager的缓存没有该对象数据库中有该记录 情况4传入的对象有identityManager的缓存有该对象 flush方法 refresh方法 clear c

JPA学习笔记(7)——映射多对一关联关系

多对一关联关系 两个实体类,User和Order,一个User可以有多个Order,一个Order只能有一个User 建立关联关系 使用@ManyToOne注解映射多对一关联关系 User实体类 package com.jpa.helloworld; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.pers

Spring入门---JPA学习笔记

用了一段时间的Spring,到现在也只是处于会用的状态,对于深入一点的东西都不太了解.所以决定开始深入学习Spring. 本文主要记录JPA学习.在学习JPA之前,需要了解一些ORM的概念. ORM概念: 对象关系映射ORM(Object/Relation Mapping)是一种为了解决面向对象和关系数据之间存在互不匹配现象的技术(范式不匹配).简而言之,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到数据库中.本质上是将数据从一种形式转换到另外一种形式.(个人考虑:

spring data jpa学习笔记一:helloworld

在学习 JPA Spring Data之前,我们有必要了解一下JPA和Spring Data. JPA JPA全称Java Persistence API.即java持久化规范.JPA通过注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. Spring Data Spring Data是Spring框架的一个子项目,就像Spring MVC是Spring的一部分一样.使得数据库访问变得方便和快捷.Spring Data 支持JPA. JPA Spring Data J

6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)

单向多对一的关联关系 具体体现:n的一方有1的引用,1的一方没有n的集合属性 举个例子:订单Order和顾客Customer是一个单向多对一的关联关系.Order是n的一方,有对Customer的引用:而Customer作为1的一方却没有Order的集合属性. 主要是对n的一方使用@ManyToOne和@JoinColumn注解.而1的一方不需要做任何修改.具体的映射方法: 1.采用@ManyToOne注解映射多对一的关联关系,默认情况下采用“左外连接”的方式进行加载.可以通过配置@ManyTo