用jpa删除连接表中的行

Posted

技术标签:

【中文标题】用jpa删除连接表中的行【英文标题】:delete row in join table with jpa 【发布时间】:2019-04-17 19:03:12 【问题描述】:

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

book.book

人物.作者

我做了以下代码:

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

*** 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<>();

我可以注册多位作者的书,一位作者多本书。我可以在已经注册的书中插入作者。向已注册的作者插入一本书。但我不能消除一本书与作者的关系。 我想做什么:

@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

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

【问题讨论】:

【参考方案1】:

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

在你们的关系中,Auther 拥有一方。这样您就可以从图书收藏中删除该图书,然后保存作者

author.books.remove(book)

【讨论】:

谢谢你,梅兰。奇迹般有效!祝你有美好的一天。 =)

以上是关于用jpa删除连接表中的行的主要内容,如果未能解决你的问题,请参考以下文章

删除/编辑 MySQL ODBC 链接表中的行导致 MS Access 出错

DELETE - 删除一个表中的行

根据第三个表中的列值删除表中的行

如何删除EXCEL表中的大量数据行,要删除的行数大概8万

如何从mysql中的表中删除重复的行

我可以从 Athena 中删除数据(表中的行)吗?