hibernate post初始化

时间:2009-11-05 13:33:25

标签: java hibernate orm

一旦Hibernate从数据库加载对象,我想初始化持久化对象的类成员。

我该怎么做?

更具体地说:在以下持久化对象中,我想初始化date的时区

class Schedule {

    Calendar date
    TimeZone tz;

}

我无法在构造函数中执行此操作,因为hibernate将使用setter初始化对象。我不能在setter中这样做,因为我不能依赖初始化的顺序。

4 个答案:

答案 0 :(得分:7)

您需要注册一个post-load事件监听器;它将在您的对象加载后调用,因此您可以进行任何必要的后处理。

如果你正在使用JPA(Hibernate EntityManager),你可以简单地write a method and annotate it with @PostLoad

否则,对于核心Hibernate,您需要实现PostLoadEventListenerdeclare 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