This question already has an answer here:
JPA EventListener method not called on change to many-to-many collection?
(1个答案)
去年关闭。
我有一个JPA带注释的类,其中包含一个类似这样的集合:
我所看到的是,如果我有一个受管理的Employee实体,并且将其添加到它的仆从集合中,则不会调用
修改映射的集合后,是否有办法让PreUpdate触发?还是有其他技术或特定于Hibernate的注释来检测何时发生?
(1个答案)
去年关闭。
我有一个JPA带注释的类,其中包含一个类似这样的集合:
@Entity
public class Employee {
@Id
private int id;
@Basic
private String name;
@OneToMany
@JoinTable(name = "ORG", joinColumns = @JoinColumn(name="MINION"),
inverseJoinColumns = @JoinColumn(name="EMP"))
private List<Employee> minions = new ArrayList<Employee>();
@PreUpdate
public void preUpdate(){ ... }
}
我所看到的是,如果我有一个受管理的Employee实体,并且将其添加到它的仆从集合中,则不会调用
preUpdate
方法。在数据库的映射表中添加了新行,因此我知道更新正在进行。如果我直接在Employee上更改属性(如名称),则在提交事务时preUpdate
将按预期触发。修改映射的集合后,是否有办法让PreUpdate触发?还是有其他技术或特定于Hibernate的注释来检测何时发生?
最佳答案
在正在针对相关实体执行database UPDATE operation之前触发@PreUpdate
事件。
如果您不更新Employee
的直接属性,则没有要为其表执行的UPDATE
,因此永远不会调用@PreUpdate
侦听器。使用@PrePersist
事件(由“刷新”而不是“更新”触发),您应该会更好。
10-08 14:27