码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-10-29 13:32:25      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:多对多

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());
		}








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

标签:多对多

原文地址:http://shamrock.blog.51cto.com/2079212/1707592

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!