jpa之多对多关系

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_empt_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_empt_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_empt_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_empt_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值