繁体   English   中英

Hibernate在更新时删除关系

[英]Hibernate removes relation on update

我想用JPA注释定义我的@ManyToMany关系,以便在更新实体时不删除关系。

@ManyToMany(targetEntity=Event.class, cascade={CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinTable(
  name = "event_user", 
  joinColumns = @JoinColumn(name = "user_id"), 
  inverseJoinColumns = @JoinColumn(name = "event_id")
)
private Set<Event> events;

和事件类

@ManyToMany(cascade = {CascadeType.ALL}, mappedBy="events", targetEntity=User.class, fetch = FetchType.LAZY)
private Set<User> attending;

我以为设置CascadeType.REMOVE不会在更新时触发删除,但是当我在用户对象上调用update时,它的所有相关事件都将被删除。

这是我的DAO

@Override
public User update(User entity) {
    sessionFactory.getCurrentSession().update(entity);
    return entity;
}

当我调用实体的更新时,Hibernate会执行以下操作:

Hibernate: delete from event_user where user_id=?

到目前为止,您对问题的评论是正确的。 您显然没有在更新实体之前从数据库中加载该实体。 因此,休眠会更新所有内容,就像在您的实体中找到它一样。 因此,请加载实体(通过ID?),合并您的更改并随后进行更新。

顺便说一句,您还应该考虑使用delete orphans注解。 因此,您将确保在将事件集合设置为null时,不仅在删除整个用户时,还将删除用户的事件。

暂无
暂无

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

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