Java @hibernate/JPA中的PreUpdate和@Prepersist(使用会话)

Java @hibernate/JPA中的PreUpdate和@Prepersist(使用会话),java,hibernate,jpa,jakarta-ee,Java,Hibernate,Jpa,Jakarta Ee,我遇到了一个向现有项目添加修复程序的拦截器。主要问题是我想在POJO中使用@Prepersist和@PreUpdate来处理使用hibernate实现的JPA with session的LastModified字段插入和更新 原因 这一更改是必需的,因为需要使用liquibase 1.9.5,我知道,因为我以前遇到过这个问题,liquibase translate timestamp使用默认的current_timestamp定义为datetime,这对mysql数据库来说太糟糕了 所以我需要一

我遇到了一个向现有项目添加修复程序的拦截器。主要问题是我想在POJO中使用@Prepersist和@PreUpdate来处理使用hibernate实现的JPA with session的LastModified字段插入和更新

原因 这一更改是必需的,因为需要使用liquibase 1.9.5,我知道,因为我以前遇到过这个问题,liquibase translate timestamp使用默认的current_timestamp定义为datetime,这对mysql数据库来说太糟糕了

所以我需要一种在代码中而不是数据库中设置的方法,这样我就可以安全地将时间戳字段更改为datetime

现在这些口译员似乎没有被执行,我发现使用entityManager是合适的。这目前是不可能的。所以我想知道是否有一个简单的方法来解决我的问题,这意味着使用@Prepersist或@PreUpdate或其他解决方法来设置lastModified字段,使其仍然使用会话

现在看来,这些解释器并没有被执行,通过很少的搜索,我发现使用entityManager是合适的

是的,如果您使用会话API,JPA回调将不起作用

因此,我想知道是否有一种简单的方法可以解决我的问题,即使用@PrePersist或@PreUpdate或其他解决方法来设置lastModified字段仍然使用会话

据我所知,如果您使用的是Spring,没有简单的解决方法,不过不妨看看


我对基于Hibernate的解决方案的建议是使用和一个或多个接口。查看示例。

hibernate或jpa中的实体中主要使用@PrePersist和@PreUpdate注释。当我们保存一个实体时,调用@PrePersist方法。

Hi Pascal,我尝试使用hibernate事件侦听器,它成功了。再次感谢您的帮助;关于侦听器有一个很好的解释,这里有一个简单的方法来启用必要的事件侦听器: