2010-11-09 66 views
30

我打了一個阻滯劑,爲現有項目添加了一個修復程序。主要問題是我想在POJO中使用@Prepersist和​​來照顧LastModified字段(插入和更新)使用會話的JPA的hibernate實現。@PreUpdate和@Prepersist在休眠/ JPA(使用會話)

原因是什麼?:: 需要更改是因爲需要使用liquibase 1.9.5,我知道(因爲我之前遇到過這種情況),liquibase將timestamp轉換爲datetime並使用默認current_timestamp,這對於mysql數據庫來說太糟糕了。

所以我需要一種方法來擁有這套代碼,而不是在數據庫中,所以我可以放心地改變時間戳字段datetime.then liquibase是幸福的,我很高興。

現在看來,這些解釋都沒有被執行,用小的搜索,我發現它使用entityManager。那目前從question.So的,我會想知道是否有一個SIMPLE周圍方式是合適的有@Prepersist或​​甚至其他的解決方法我的問題,意義設置lastModified領域仍然使用會話

回答

42

現在看來,這些解釋都沒有被執行,用小的搜索,我發現它使用EntityManager的適合。

是的,如果您使用的是Session API,則JPA回調將不起作用。

所以我想知道,如果是有沒有解決我的問題,一個簡單的方法,是指具有@PrePersist或@PreUpdate甚至其他變通方法來設置上次更改領域仍然使用會話

要我知識,沒有簡單的方法(如果你使用的是Spring,MAYBE看看this post雖然)。

我的用於基於休眠溶液的建議是使用events(以及一個或多個接口(一個或多個))。以Hibernate and last modified date爲例。

+3

喜帕,我已經使用Hibernate的事件監聽器,並試圖再次對你有所幫助worked.thanks。 ;) – 2010-11-09 14:54:59

+0

有聽衆很好的解釋在[http://anshuiitk.blogspot.sk/2010/11/hibernate-pre-database-opertaion-event.html](http://anshuiitk.blogspot.sk/ 2010/11年/休眠-預數據庫opertaion-event.html) – planky 2015-06-02 09:48:06

+0

這裏有一個簡單的方法來實現必要的事件監聽器:https://n1njahacks.wordpress.com/2016/10/07/jpa-callbacks-with-休眠-的SessionFactory和-NO-的EntityManager / – 2016-10-07 21:47:41