一旦Hibernate从数据库加载对象,我想初始化持久化对象的类成员。
我该怎么做?
更具体地说:在以下持久化对象中,我想初始化date
的时区
class Schedule {
Calendar date
TimeZone tz;
}
我无法在构造函数中执行此操作,因为hibernate将使用setter初始化对象。我不能在setter中这样做,因为我不能依赖初始化的顺序。
答案 0 :(得分:7)
您需要注册一个post-load事件监听器;它将在您的对象加载后调用,因此您可以进行任何必要的后处理。
如果你正在使用JPA(Hibernate EntityManager),你可以简单地write a method and annotate it with @PostLoad
。
否则,对于核心Hibernate,您需要实现PostLoadEventListener和declare it in your configuration。
答案 1 :(得分:0)
在映射上使用热切初始化。
@Basic(fetch=FetchType.EAGER)
Calendar date;
答案 2 :(得分:0)
实际情况是什么?如果您不需要保留此值,请使用@Transient
对其进行注释,并以这种方式进行初始化:
private Calendar date = Calendar.getInstance();
答案 3 :(得分:0)
根据您的问题,我不确定这是否适用于您的问题,但是可能值得查看用户定义的类型来处理不同的时区。
如果数据库应该包含所有时间戳,那么这非常有用。 UTC时间,但java使用的是默认系统时区。
请参阅this article