jpa之多对多关系
单向多对多关系
单向多对多关系
@Entity
@Table(name = "t_emp")
public class EmployeeDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany(targetEntity = ProjectDo.class)
private Collection projects;
//getter and setter
}
@Entity
@Table(name = "t_pro")
public class ProjectDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "project_name")
private String projectName;
//getter and setter
}
生成t_emp
、t_pro
和表t_emp_projects
三个表:
mysql> desc t_emp;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set
mysql> desc t_emp_projects;
+----------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+-------+
| employee_do_id | int(11) | NO | MUL | NULL | |
| projects_id | int(11) | NO | MUL | NULL | |
+----------------+---------+------+-----+---------+-------+
2 rows in set
mysql> desc t_pro;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| project_name | varchar(255) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
2 rows in set
单向多对多关系(连接表[JoinTable])
@Entity
@Table(name = "t_emp")
public class EmployeeDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany(targetEntity = ProjectDo.class)
@JoinTable(name = "emp_pro_relation",
joinColumns = @JoinColumn(name = "emp_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "pro_id", referencedColumnName = "id"))
private Collection projects;
//getter and setter
}
@Entity
@Table(name = "t_pro")
public class ProjectDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "project_name")
private String projectName;
//getter and setter
}
生成t_emp
、t_pro
和表emp_pro_relation
三个表:
mysql> desc t_pro;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| project_name | varchar(255) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
2 rows in set
mysql> desc t_emp;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set
mysql> desc emp_pro_relation;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| emp_id | int(11) | NO | MUL | NULL | |
| pro_id | int(11) | NO | MUL | NULL | |
+--------+---------+------+-----+---------+-------+
2 rows in set
双向多对多关系
双向多对多关系
@Entity
@Table(name = "t_emp")
public class EmployeeDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany(targetEntity = ProjectDo.class)
private Collection projects;
//getter and setter
}
@Entity
@Table(name = "t_pro")
public class ProjectDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "project_name")
private String projectName;
@ManyToMany(targetEntity = EmployeeDo.class, mappedBy = "projects")
private Collection employees;
//getter and setter
}
生成t_emp
、t_pro
和表t_emp_projects
三个表:
mysql> desc t_emp;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set
mysql> desc t_pro;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| project_name | varchar(255) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
2 rows in set
mysql> desc t_emp_projects;
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| employees_id | int(11) | NO | MUL | NULL | |
| projects_id | int(11) | NO | MUL | NULL | |
+--------------+---------+------+-----+---------+-------+
2 rows in set
双向多对多关系(连接表[JoinTable])
@Entity
@Table(name = "t_emp")
public class EmployeeDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany(targetEntity = ProjectDo.class)
@JoinTable(name = "emp_pro_relation",
joinColumns = @JoinColumn(name = "emp_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "pro_id", referencedColumnName = "id"))
private Collection projects;
//getter and setter
}
@Entity
@Table(name = "t_pro")
public class ProjectDo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "project_name")
private String projectName;
@ManyToMany(targetEntity = EmployeeDo.class)
@JoinTable(name = "emp_pro_relation",
joinColumns = @JoinColumn(name = "pro_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "emp_id", referencedColumnName = "id"))
private Collection employees;
//getter and setter
}
生成t_emp
、t_pro
和表emp_pro_relation
三个表:
mysql> desc t_pro;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| project_name | varchar(255) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
2 rows in set
mysql> desc t_emp;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set
mysql> desc emp_pro_relation;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| emp_id | int(11) | NO | MUL | NULL | |
| pro_id | int(11) | NO | MUL | NULL | |
+--------+---------+------+-----+---------+-------+
2 rows in set