休眠/JPA 中的@PreUpdate和@Prepersist(使用会话)

2022-09-01 06:52:50

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

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

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

现在看来,这些解释器没有被执行,几乎没有搜索我发现它适合使用。这目前是没有问题的。因此,我想知道是否有一种简单的方法来解决我的问题,这意味着具有甚至其他解决方法来设置仍在使用会话的字段entityManager@Prepersist@PreUpdatelastModified


答案 1

现在看来,这些解释器没有被执行,几乎没有搜索我发现它适合使用entityManager。

是的,如果您使用的是 API,则 JPA 回调将不起作用。Session

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

据我所知,没有简单的方法(如果你正在使用Spring,也许可以看看这篇文章)。

我对基于Hibernate的解决方案的建议是使用事件(以及一个或多个接口)。例如,检查休眠和上次修改日期


答案 2

主要@PrePersist和@PreUpdate注释用于休眠或 jpa 中的实体。当我们在那个时间保存一个实体时,@PrePersist方法被调用。


推荐