[英]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.