我想在Hibernate從數據庫加載對象後立即初始化持久化對象的類成員。休眠後初始化
我該怎麼做?
更具體地說:在下面的持久對象,我想初始化date
的時區
class Schedule {
Calendar date
TimeZone tz;
}
我不能在構造函數中做到這一點,因爲Hibernate將使用setter方法來初始化對象。我不能在setter中這樣做,因爲我不能依賴初始化的順序。
我想在Hibernate從數據庫加載對象後立即初始化持久化對象的類成員。休眠後初始化
我該怎麼做?
更具體地說:在下面的持久對象,我想初始化date
的時區
class Schedule {
Calendar date
TimeZone tz;
}
我不能在構造函數中做到這一點,因爲Hibernate將使用setter方法來初始化對象。我不能在setter中這樣做,因爲我不能依賴初始化的順序。
您需要註冊一個後加載事件偵聽器;它會在你的對象被加載後被調用,所以你可以做任何需要的後處理。
如果您使用的是JPA(Hibernate EntityManager),那麼您可以簡單地使用write a method and annotate it with @PostLoad
。
否則,對於核心Hibernate,您需要實現PostLoadEventListener和declare it in your configuration。
在您的映射上使用預先初始化。
@Basic(fetch=FetchType.EAGER)
Calendar date;
實際場景是什麼?如果你不需要這個值被保留,註釋他們@Transient
,並把initalization這樣:
private Calendar date = Calendar.getInstance();
從你的問題我不知道這是否適用於您的問題,但它可能是值得看看用戶定義的類型來處理不同的時區。
這是非常有用的,如果數據庫應該包含所有時間戳在例如UTC時間,但java正在使用默認的系統時區。
請參閱this article
這不是OP要求的。默認情況下,對於值屬性,加上抓取是非常渴望的。 – ChssPly76