我在两个实体之间有 @ManyToMany 关系。当我在拥有方执行更新时,JPA 似乎从我的数据库中删除了所有链接记录并重新插入它们。对我来说这是一个问题,因为我有一个在删除记录之前触发的 MySQL 触发器。关于如何解决这个问题有什么想法吗?
@Entity
public class User {
@Id
@Column(name="username")
private String username;
...
@ManyToMany
@JoinTable(name="groups", joinColumns=
@JoinColumn(name="username", referencedColumnName="username"),
inverseJoinColumns=@JoinColumn(name="groupname",
referencedColumnName="type_id"))
private List<UserType> types;
...
}
@Entity
public class UserType {
@Id
@Column(name="type_id")
private String id;
@ManyToMany(mappedBy="types")
private List<User> users;
...
}
Use Set
代替List
解决了问题。但我不知道为什么它有效。
Hibernate提供的另一个解决方案是拆分@ManyToMany
关联成两个双向@OneTo@Many
关系。看Hibernate 5.2 文档 https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#associations-many-to-many-bidirectional-with-link-entity例如。
如果是双向@OneToMany
当关联表现得更好时
删除或更改子元素的顺序,@ManyToMany
关系不能从这种优化中受益,因为
外键端不受控制。为了克服这个限制,
链接表必须直接公开,并且@ManyToMany
协会
分成两个双向@OneToMany
关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)