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

(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