第二百五十五节 JPA教程 - JPA 多对多连接表示例
JPA教程 - JPA 多对多连接表示例
以下代码显示如何为多对多映射设置连接表。
例子
下面的代码来自PersonDaoImpl.java。
package cn.w3cschool.common;import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;import org.springframework.transaction.annotation.Transactional;@Transactional public class PersonDaoImpl {public void test(){Department d1 = new Department();d1.setName("Design");Department d2 = new Department();d2.setName("Testing");Person p1 = new Person("Tom");p1.getDepartments().add(d1);p1.getDepartments().add(d2);Person p2 = new Person("Jack");p2.getDepartments().add(d1);p2.getDepartments().add(d2);d1.getPersons().add(p1);d1.getPersons().add(p2);em.persist(p1);em.persist(p2);em.persist(d1);em.persist(d2);}@PersistenceContextprivate EntityManager em; }
下面的代码来自Person.java。
package cn.w3cschool.common; import java.util.HashSet; import java.util.Set;import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany;@Entity public class Person {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private long id;private String name;@ManyToMany@JoinTable(name="PERSON_DEPT", joinColumns=@JoinColumn(name="PERSON_ID"),inverseJoinColumns=@JoinColumn(name="DEPT_ID"))private Set<Department> departments = new HashSet<Department>();public Person() {}public Person(String name) {this.name = name;}public Set<Department> getDepartments() {return departments;}public void setDepartments(Set<Department> departments) {this.departments = departments;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", departments="+ departments + "]";}}
下面的代码来自Department.java。
package cn.w3cschool.common;import java.util.HashSet; import java.util.Set;import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany;@Entity public class Department implements java.io.Serializable{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private long id;private String name;@ManyToManyprivate Set<Person> persons = new HashSet<Person>();public Set<Person> getPersons() {return persons;}public void setPersons(Set<Person> persons) {this.persons = persons;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Department [id=" + id + ", name=" + name + ", persons=" + persons+ "]";}}
以下是数据库转储。
Table Name: DEPARTMENTRow:Column Name: ID,Column Type: BIGINT:Column Value: 1Column Name: NAME,Column Type: VARCHAR:Column Value: DesignRow:Column Name: ID,Column Type: BIGINT:Column Value: 2Column Name: NAME,Column Type: VARCHAR:Column Value: TestingTable Name: DEPARTMENT_PERSONRow:Column Name: DEPARTMENT_ID,Column Type: BIGINT:Column Value: 1Column Name: PERSONS_ID,Column Type: BIGINT:Column Value: 1Row:Column Name: DEPARTMENT_ID,Column Type: BIGINT:Column Value: 1Column Name: PERSONS_ID,Column Type: BIGINT:Column Value: 2Table Name: PERSONRow:Column Name: ID,Column Type: BIGINT:Column Value: 1Column Name: NAME,Column Type: VARCHAR:Column Value: TomRow:Column Name: ID,Column Type: BIGINT:Column Value: 2Column Name: NAME,Column Type: VARCHAR:Column Value: JackTable Name: PERSON_DEPTRow:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 1Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 1Row:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 1Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 2Row:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 2Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 1Row:Column Name: PERSON_ID,Column Type: BIGINT:Column Value: 2Column Name: DEPT_ID,Column Type: BIGINT:Column Value: 2