【发布时间】:2023-03-06 20:50:01
【问题描述】:
我有一个实体:
@Entity
@EntityListeners(MyEntityListener.class)
class MyEntity{ ... }
还有听者:
class MyEntityListener{
@PrePersist
@PreUpdate
public void doSomething(Object entity){ ... }
}
我正在为此实体 (1.4.1) 和 EclipseLink 使用 Spring Data 生成的 DAO。代码行为如下:
MyEntity entity = new Entity();
entity = dao.save(entity); // the doSomething() is called here
// change something it the entity and save it again
dao.save(entity); // the doSomething() is NOT called here, checked with breakpoint
问题已经是described by someone in 2009,但是他们没有想出任何解决方案。我想知道是否有人知道如何解决它?
【问题讨论】:
-
你确定
doSomething()没有被第二次调用吗?它可以在事务提交之前调用,而不是立即调用。 -
您是否尝试在第二次 save() 之前分离实体?
-
@AndreiI 你是对的,当我在第二次保存之前通过
entity = dao.findOne(entity.getId())获取实体时,侦听器的方法被成功调用。如果您知道发生了什么,请将其发布为答案,以及原因。
标签: java spring jpa spring-data-jpa