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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用SpringBoot和JPA进行多对多查询时,可以按照以下步骤进行操作: 1. 首先,要确保项目中已经引入了所需的依赖,包括spring-boot-starter-data-jpa和相关数据库的依赖(例如h2数据库)。 2. 然后,在实体类中定义多对多关系。假设我们有两个实体类:User和Role,它们之间是多对多关系。可以使用@ManyToMany注解来实现这种关系。在User实体类中,使用@ManyToMany注解将User与Role关联起来,而在Role实体类中,使用@ManyToMany注解将Role与User关联起来。 3. 接下来,需要在数据库中创建适当的表来存储多对多关系。使用JPA的自动建表功能,可以根据实体类的定义自动生成相应的表结构。 4. 对于多对多查询,可以使用JPA提供的方法来进行操作。例如,可以在UserRepository中定义一个方法,使用@Query注解来编写自定义的查询语句,从而实现多对多的查询操作。 5. 最后,可以在Controller层调用相应的Service方法,将查询结果返回给前端。 综上所述,使用SpringBoot和JPA进行多对多查询的步骤包括引入所需的依赖、定义实体类的多对多关系、创建数据库表、编写查询方法和调用查询方法。通过这些步骤,可以实现多对多查询的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot JPA实现查询多值](https://download.csdn.net/download/weixin_38599430/12756496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [spring data jpa关联查询(一对一、一对多、多对多)](https://blog.csdn.net/WGH100817/article/details/101720340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值