This question already has an answer here:
JPA EventListener method not called on change to many-to-many collection?

(1个答案)


2年前关闭。




我有一个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-05 22:09