hibernate/JPA 中的 @PreUpdate 和 @Prepersist(使用会话)
Posted
技术标签:
【中文标题】hibernate/JPA 中的 @PreUpdate 和 @Prepersist(使用会话)【英文标题】:@PreUpdate and @Prepersist in hibernate/JPA (using session) 【发布时间】:2011-05-07 04:56:12 【问题描述】:我遇到了一个向现有项目添加修复程序的阻止程序。主要问题是我想在POJO
中使用@Prepersist
和@PreUpdate
来处理LastModified
字段(插入和更新)使用带有会话的 JPA 的休眠实现。
原因?:
之所以需要更改,是因为需要使用liquibase 1.9.5
,而且我知道(因为我之前遇到过这种情况)liquibase 使用默认的 current_timestamp 将时间戳转换为日期时间,这对于 mysql 数据库来说太糟糕了。
所以我需要一种方法在代码中而不是在数据库中进行设置,这样我就可以安全地将时间戳字段更改为 datetime。然后 liquibase 很高兴,我很高兴。
现在似乎那些解释器没有被执行,几乎没有搜索我发现它适合使用entityManager
。目前没有问题。所以我想知道是否有一个 SIMPLE 解决我的问题,这意味着有@Prepersist
或@PreUpdate
甚至其他解决方法来设置lastModified
字段仍在使用会话
【问题讨论】:
【参考方案1】:现在看来那些解释器没有被执行,几乎没有搜索我发现它适合使用 entityManager。
是的,如果您使用 Session
API,JPA 回调将不起作用。
所以我想知道是否有解决我的问题的简单方法,这意味着使用 @PrePersist 或 @PreUpdate 甚至其他解决方法来设置仍然使用会话的 lastModified 字段
据我所知,没有简单的方法(如果您使用的是 Spring,也许可以查看 this post)。
我对基于 Hibernate 的解决方案的建议是使用 events(以及一个或多个接口)。以Hibernate and last modified date 为例。
【讨论】:
嗨 Pascal,我尝试过使用休眠事件侦听器,它成功了。再次感谢您的帮助。 ;) 在http://anshuiitk.blogspot.sk/2010/11/hibernate-pre-database-opertaion-event.html有听众很好的解释 这是启用必要事件侦听器的简单方法:n1njahacks.wordpress.com/2016/10/07/…【参考方案2】:主要是@PrePersist 和@PreUpdate 注解用在hibernate 或jpa 中的entity 中。当我们保存一个实体时,@PrePersist 方法被调用。
【讨论】:
以上是关于hibernate/JPA 中的 @PreUpdate 和 @Prepersist(使用会话)的主要内容,如果未能解决你的问题,请参考以下文章
JPA / Hibernate中@GeneratedValue中的字段生成器有啥用?
hibernate/JPA 中的 @PreUpdate 和 @Prepersist(使用会话)
Hibernate/JPA @OneToOne 返回空指针异常
如何使用 @ID 和 @GeneratedValue 从 Hibernate + JPA 中的序列中获取 Oracle 生成的值