我在StackOverflow上遇到了一些类似的问题,尝试了解决方案,但没有找到答案。EclipseLink JPA`@ PreUpdate`调用不存在
我正在使用相当常见的JPA策略来设置一些实体的最后修改时间。设置列和字段,然后标记一个方法,并让它设置为等于当前时间。
问题是我可以在调试器中看到该方法正在被调用,并且该字段正在更新,但是在我的数据库日志中,我只看到一个SQL调用来更新不包含UPDATE的更改字段为时间戳字段。
使事情变得更复杂@PrePersist
完美地工作,只有表现出这种行为。
到目前为止我找到的最接近的解释是在这LINK。
在类似的问题:#1725699和#1745890
我使用的EclipseLink v2和JPA V1与GlassFish v2中的兼容性。
我试图直接在实体类的方法中使用这两个注释以及使用@EntityListener
注释附加到实体类的EntityListener
。
我怀疑这是EclipseLink中的一个错误,但我无法证明它。
错误与否我会非常喜欢这个简单的操作工作。这个实现有什么问题吗?这是EclipseLink中的一个已知问题吗?这是JPA中的一个已知问题吗?有没有解决的办法?
缺少去数据库和使用触发器,是否有一个备用路径让我的Java代码设置updated_on时间戳?
感谢您的建议!
代码片段如下。
实体领域:
@Column(name = "updated_on")
@Temporal(TemporalType.TIMESTAMP)
private Date updatedOn;
@Column(name = "created_on")
@Temporal(TemporalType.TIMESTAMP)
private Date createdOn;
注释更新方法:
@PreUpdate
public void setUpdatedOn(Timestamped object) {
object.setUpdatedOn(new Date());
}
@PrePersist
public void setCreatedOn(Timestamped object) {
if (object.getCreatedOn()==null) {
object.setCreatedOn(new Date());
}
}
菲利克斯定义
- 谢谢你的澄清。我认为那是我所看到的。 我看到如何实现DescriptorEvent处理,几乎与注释一些方法一样简单。只需找到正确的XML文件来添加处理程序。 再次感谢! – Freiheit 2009-12-10 15:04:18
嗨Freiheit,我现在面临同样的问题,你会介意分享你的DescriptorEvent代码作为例子吗? :)谢谢 – sunnycmf 2011-04-04 10:20:31
@Freiheit也很想看到解决方案。提前致谢。 – 2011-04-06 12:45:45