使用Hibernate / JPA事件侦听器在更新其他实体时更新一个实体

时间:2010-09-30 10:55:47

标签: hibernate jpa entitylisteners

我的系统中有三个实体 - 当另外两个实体的字段发生变化时,必须更新其中一个实体:

@Entity
public class Order {
    private String name;
    private Integer quantity;
    private String status;
}

@Entity
public class OrderLocation {
    private String status;
    private String desc;
}

@Entity 
public class OrderKey {
    private String generatedKey;
}

因此,在订单或OrderLocation上的任何字段更改后,我必须重新生成密钥(在代码中),然后将其保存回OrderKey。

我一直在寻找EntityListeners来做这件事,但不确定是使用JPA还是Hibernate版本。我想理想地使用注释。

非常感谢任何指导 - 提前感谢。

1 个答案:

答案 0 :(得分:0)

我真的不赞成这样的解决方案。在我正在工作的项目中,我们使用执行所有处理的特殊处理程序。处理程序必须知道在发生更改时必须更新哪些实体。例如。使用处理数据库更新的抽象层。如果对Order或OrderLocation进行了更改,则它会处理OrderKey的更新。

如果您使用侦听器,您也可能遇到循环问题。所以我建议在实体中使用处理程序而不是listerners。

但是如果您想使用这样的机制,也许您应该尝试使用@PrePersist和@PreUpdate来调用能够处理实体更改的方法。