JPA 多对多映射:构建实体间的复杂关联

在 Java 持久化 API (JPA) 中,多对多映射定义了一种关系,其中一个实体的多个实例与另一个实体的多个实例相关联。在关系型数据库中,这通常通过一个连接表来实现,该表包含引用两个实体主键的外键。

理解多对多映射

在多对多关系中:

  • 一名学生可以注册多门课程。
  • 一门课程可以有多名学生。

在 JPA 中,我们通过 @ManyToMany 注解来实现这一点,通常会结合 @JoinTable 来定义连接表。

在 JPA 中实现多对多映射的步骤

1. 定义实体

让我们创建两个实体:Student 和 Course。每个实体都维护一个引用另一侧的集合。

Student 实体:

Java


CODEBLOCK_d45e5ddd

  • @ManyToMany(mappedBy = "students") 注解将这一侧设置为关系的反向端(Inverse Side)。
  • courses 字段映射到 Course 实体中定义的拥有端。

Course 实体:

Java


CODEBLOCK_cb1d7584

  • @JoinTable 定义了连接表的名称(course_student)。
  • joinColumns 代表 Course 的外键。
  • inverseJoinColumns 代表 Student 的外键。

2. 配置持久化单元

在 persistence.xml 中,我们需要配置数据库连接和实体类。

XML


CODEBLOCK_71d8884e

这个文件注册了实体类,并为 JPA 和 Hibernate 设置了数据库连接。

项目结构:

!Project Structure

3. 创建服务层类

#### StudentService.java:

Java


CODEBLOCK_e80e219a

CourseService.java:

Java


package service;

import jakarta.persistence.EntityManager;

import jakarta.persistence.EntityTransaction;

import model.Course;

import java.util.List;

public class CourseService {

private final EntityManager entityManager;

public CourseService(EntityManager entityManager) {

this.entityManager = entityManager;

}

public List getAllCourses() {

return entityManager.createQuery("SELECT c FROM Course c", Course.class).getResultList();

}

public Course saveCourse(Course course) {

EntityTransaction transaction = entityManager.getTransaction();

transaction.begin();

entityManager.persist(course);

transaction.commit();

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/29176.html
点赞
0.00 平均评分 (0% 分数) - 0