JPA学习笔记(11)——映射双向多对多关联关系
2016-07-12 16:23
337 查看
多对多关联
比如现在有两个实体类:1. Product(商品)2. Category(类别)一个商品可以有多个类别,一个类别也可以有多个商品,这就形成了多对多的关系
Product
package com.jpa.helloworld2; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.Table; @Table(name="T_PRODUCT") @Entity public class Product { @GeneratedValue @Id @Column(name="ID") private Integer id; @Column(name="NAME") private String name; @JoinTable(name="PRODUCT_CATEGORY",//中间表的名称 joinColumns={@JoinColumn(name="PRODUCT_ID",referencedColumnName="ID")},//中间表PRODUCT_ID字段关联PRODUCT的ID inverseJoinColumns={@JoinColumn(name="CATEGORY_ID",referencedColumnName="ID")})//中间表CATEGORY_ID字段关联CATEGORY的ID @ManyToMany private List<Category> categorys = new ArrayList<Category>(); public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Category> getCategorys() { return categorys; } public void setCategorys(List<Category> categorys) { this.categorys = categorys; } }Category
package com.jpa.helloworld2; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.Table; @Table(name="T_CATEGORY") @Entity public class Category { @GeneratedValue @Id @Column(name="ID") private Integer id; @Column(name="NAME") private String name; @ManyToMany(mappedBy="categorys") private List<Product> products = new ArrayList<Product>(); public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Product> getProducts() { return products; } public void setProducts(List<Product> products) { this.products = products; } }多对多关系需要用到第三张表,不过这张表不需要我们手动创建,JPA会根据我们使用注解配置的来帮我们创建,我们只需要写好上面的两个实体类即可。
JPA创建的三张表:
中间表中的外键关系
增加
Category category1 = new Category(); category1.setName("category1"); Category category2 = new Category(); category2.setName("category2"); Product product1 = new Product(); product1.setName("product1"); Product product2 = new Product(); product2.setName("product2"); category1.getProducts().add(product1); category1.getProducts().add(product2); category2.getProducts().add(product1); category2.getProducts().add(product2); product1.getCategorys().add(category1); product1.getCategorys().add(category2); product2.getCategorys().add(category1); product2.getCategorys().add(category2); entityManager.persist(category1); entityManager.persist(category2); entityManager.persist(product1); entityManager.persist(product2);
查询
对于关联的集合对象,默认使用懒加载的策略
无论查询维护关联关系的一方,还是查询不维护关联关系的一方,SQL语句相同。
相关文章推荐
- fir原始崩溃栈解析
- android 通信
- Mybatis参数传递的集中写法和方式
- struts之XML配置文件归纳
- ajaxFileUpload插件上传文件 返回 syntaxError :unexpected token <
- golang并发编程的两种限速方法
- python3.x+windows下pip install 出现unable to find vcvasall.bat 的解决办法
- NYOJ-取石子(一)
- java&Protocol Buffers
- 179 php phpMyAdmin访问远程数据库
- lua知识点1-使用lua string作为二进制buffer和c和c++交互
- [06]tensorflow源码例子mnist源码——mnist.py
- 细说Linux中的信号(signal )
- andorid中的应用权限的检查
- JPA学习笔记(10)——映射双向一对一关联关系
- hdu4315Climbing the Hill
- java摸板设计模式
- 初识DASH7
- JVM内存区域
- 账户相关知识