繁体   English   中英

使用jpa删除联接表中的行

delete row in join table with jpa

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

book.book

people.author

我做了以下代码:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM