我想在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