hibernate / JPA中的@PreUpdate和@Prepersist(使用session)

时间:2010-11-09 11:45:51

标签: java hibernate jpa java-ee

我遇到了一个阻止程序,为现有项目添加了一个修复程序。主要问题是,我想在@Prepersist中使用@PreUpdatePOJO来处理LastModified字段(插入和更新)使用带有会话的JPA的hibernate实现。

原因? : 这个更改是必需的,因为需要使用liquibase 1.9.5并且我知道(因为我之前已经遇到过这种情况)liquibase使用默认的current_timestamp将时间戳转换为日期时间,这对于mysql数据库来说太糟糕了。

所以我需要一种方法在代码中而不是在数据库中设置这个集合,这样我就可以安全地将时间戳字段更改为datetime.then liquibase很高兴,我很高兴。

现在似乎那些解释器没有被执行,很少有搜索我发现它适合使用entityManager。这目前是不可能的。所以我想知道是否有一个简单解决我的问题,即使用@Prepersist@PreUpdate甚至其他解决方法来设置仍然使用会话的lastModified字段

2 个答案:

答案 0 :(得分:48)

  

现在似乎这些解释器没有被执行,只有很少的搜索我发现它适合使用entityManager。

是的,如果您使用的是Session API,JPA回调将无法使用。

  

所以我想知道我的问题是否有一种简单的方法,这意味着有@PrePersist或@PreUpdate甚至其他解决方法来设置lastModified字段仍然使用session

据我所知,没有简单的方法(如果你使用Spring, MAYBE 虽然看了this post)。

我对基于Hibernate的解决方案的建议是使用events(和一个或多个接口)。请查看Hibernate and last modified date以获取示例。

答案 1 :(得分:-1)

主要在休眠或jpa中的实体中使用@PrePersist和@PreUpdate批注。当我们在那时保存实体时,将调用@PrePersist方法。