我遇到了一个阻止程序,为现有项目添加了一个修复程序。主要问题是,我想在@Prepersist
中使用@PreUpdate
和POJO
来处理LastModified
字段(插入和更新)使用带有会话的JPA的hibernate实现。
原因? :
这个更改是必需的,因为需要使用liquibase 1.9.5
并且我知道(因为我之前已经遇到过这种情况)liquibase使用默认的current_timestamp将时间戳转换为日期时间,这对于mysql数据库来说太糟糕了。
所以我需要一种方法在代码中而不是在数据库中设置这个集合,这样我就可以安全地将时间戳字段更改为datetime.then liquibase很高兴,我很高兴。
现在似乎那些解释器没有被执行,很少有搜索我发现它适合使用entityManager
。这目前是不可能的。所以我想知道是否有一个简单解决我的问题,即使用@Prepersist
或@PreUpdate
甚至其他解决方法来设置仍然使用会话的lastModified
字段
答案 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方法。