我有一个实体:
@Entity
@EntityListeners(MyEntityListener.class)
class MyEntity{ ... }
而且听众:
class MyEntityListener{
@PrePersist
@PreUpdate
public void doSomething(Object entity){ ... }
}
我正在使用Spring Data生成的DAO来操作这个实体(版本号为1.4.1),并且使用EclipseLink。代码行为如下:
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
这个问题已经在2009年被某人描述过了, 但是他们没有提出任何解决方案。我想知道是否有人有解决办法?
doSomething()
第二次没有被调用吗?它可能在事务提交之前被调用,而不是立即执行。 - axtavtentity = dao.findOne(entity.getId())
获取实体并在第二次保存之前,监听器方法成功地被调用。请将其作为答案发布,并说明原因,如果您知道发生了什么。 - fraczJpaRepository
,调用repository.saveAndFlush(entity)
触发了@PreUpdate
回调。希望这能帮到你。 - maximus