使用 jpa 删除连接表中的行

Rod*_*sta 2 postgresql jpa spring-boot

我有一个问题,我找不到解决方案。我有一个 Book 表和一个 Author 表,具有多对多的关系。Book 表在 book 模式中,Author 表在 person 模式中。所以我有这个:

书本

人.作者

我做了以下代码:

*** Entity Book ***
@ManyToMany(mappedBy = "book")
private List<Author> author = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

*** Entity Author ***
@ManyToMany
@JoinTable(schema = "join_tables", name = "book_author", joinColumns = @JoinColumn(name = "fk_author"), inverseJoinColumns = @JoinColumn(name = "fk_book"))
private List<Book> books = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我可以注册一本书有几个作者,一个作者有几本书。我可以在已注册的书中插入作者。向已注册的作者插入一本书。但我无法消除一本书与作者的关系。我试图做的事情:

@Repository
public interface AuthorRepository extends JpaRepository<Author, Long> {

    @Query("DELETE FROM join_tables.book_author jtba  WHERE  jtba.fk_author = :fka AND jtba.fk_book = :fkb")
    void deleteRelationshipBookAuthor(@Param("fka") Long fka, @Param("fkb") Long fkb);
}


And it always shows the same error:
org.hibernate.hql.internal.ast.QuerySyntaxException: join_tables.book_author is not mapped
Run Code Online (Sandbox Code Playgroud)

但是该表存在于数据库中并且包含我输入的所有数据。

Meh*_*hmi 5

连接表不是实体,因此您不能在 JPQL 查询中使用它(DELETE FROM join_tables.book_author 是错误的)

在你们的关系中,Auther 是拥有的一方。所以你可以从书籍收藏中删除这本书,然后保存作者

author.books.remove(book)
Run Code Online (Sandbox Code Playgroud)