多对多关系在Spring DATA JPA中的实现需要以下步骤:

  1. 创建实体类:创建两个实体类,并使用@ManyToMany注解表示它们之间的多对多关系。

  2. 创建中间表:创建一个中间表,用于存储两个实体类之间的多对多关系。中间表需要包含两个实体类的主键作为外键。

  3. 使用@JoinTable注解:使用@JoinTable注解指定中间表的名称和外键列名。

  4. 使用@JoinColumn注解:使用@JoinColumn注解指定每个实体类的外键列名。

  5. 编写Repository接口:编写Repository接口,继承JpaRepository,并使用@Query注解实现多对多查询。

  6. 测试:编写测试用例,测试多对多查询的正确性。

下面是一个示例代码:

  1. 创建实体类
@Entity
public class Book {
    @Id
    private Long id;
    private String name;
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "book_author",
        joinColumns = @JoinColumn(name = "book_id"),
        inverseJoinColumns = @JoinColumn(name = "author_id"))
    private Set<Author> authors;
}

@Entity
public class Author {
    @Id
    private Long id;
    private String name;
    @ManyToMany(mappedBy = "authors")
    private Set<Book> books;
}
  1. 创建中间表
CREATE TABLE book_author (
    book_id BIGINT NOT NULL,
    author_id BIGINT NOT NULL,
    PRIMARY KEY(book_id, author_id),
    FOREIGN KEY(book_id) REFERENCES book(id),
    FOREIGN KEY(author_id) REFERENCES author(id)
);
  1. 使用@JoinTable注解
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "book_author",
    joinColumns = @JoinColumn(name = "book_id"),
    inverseJoinColumns = @JoinColumn(name = "author_id"))
private Set<Author> authors;
  1. 使用@JoinColumn注解
@ManyToMany(mappedBy = "authors")
private Set<Book> books;
  1. 编写Repository接口
public interface BookRepository extends JpaRepository<Book, Long> {
    @Query("SELECT b FROM Book b JOIN b.authors a WHERE a.name = :name")
    List<Book> findByAuthorName(@Param("name") String name);
}
  1. 测试
@Test
public void testFindByAuthorName() {
    List<Book> books = bookRepository.findByAuthorName("John Smith");
    assertEquals(2, books.size());
}
Spring DATA JPA多对多

原文地址: https://www.cveoy.top/t/topic/rZW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录