繁体   English   中英

JPA多对多删除实体

[英]JPA Many To Many remove entity

我使用Hibernate(通过JPA )。 有一种删除实体的方法:

    public void delete(final ID id) {    entityManager.createQuery(String.format("delete from %s e where e.id = :id", entityClass.getSimpleName()))
.setParameter("id", id).executeUpdate();
    }

我删除实体(与many2many关系):

休眠日志:

Hibernate: delete from author_to_book where (author_id) in (select id from author where id=?)
Hibernate: delete from author where id=?

谁负责从绑定表中删除关联? 毕竟,我的代码仅指定从主表中删除。 这个怎么运作?

对应:

@Entity
public class Author extends BaseEntity implements IAuthor {

@Column
private String name;

@JoinTable(name = "author_to_book",
        joinColumns =  {@JoinColumn(name = "author_id")} ,
        inverseJoinColumns = {@JoinColumn(name = "book_id")}
)
@ManyToMany(targetEntity = Book.class, fetch = FetchType.LAZY)
@OrderBy("title ASC")
private Set<IBook> books = new HashSet<>();

图书实体没有到作者实体的映射

对于JPA而言,使用字符串构造查询SQL并不是一个好主意。 应该使用JPQL或Criteria API。 通常,关联的拥有方负责从联接表中删除行。 对于双向关系,联接表中的行也可以从另一侧删除。 这实际上取决于JPA的实现。 据我所知, CMobileCom JPA可以从双方管理联接表。

免责声明:我是CMobileCom JPA的开发人员,该轻量级的JPA实现同时适用于Android和Java JDBC。

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM