我正在开发的项目使用Hibernate进行持久化。
该项目分为子项目,其中四个与此相关:
Message实体(在user-dom中)包含String userID
字段和@Transient String userName
字段。另一个实体Case与Message有一个OneToOne关系。问题如下:
我已经看到实体有一个@PostLoad注释,但显然这些没有帮助,因为我们无法从实体调用服务。目前我们手动进行服务调用,但这很容易出错(特别是在Case中间接加载Message时)。
我们如何确保每次加载Message实体时都设置字段?
答案 0 :(得分:3)
在最终应用程序中,所有部件组合在一起,实现org.hibernate.event.PostLoadEventListener
并通过xml
<hibernate-configuration>
<session-factory>
...
<event type="load">
<listener class="com.eg.MyPostLoadListener"/>
<listener class="org.hibernate.event.def.DefaultPostLoadEventListener"/>
</event>
</session-factory>
</hibernate-configuration>
或通过代码
Configuration cfg = new Configuration();
PostLoadEventListener[] stack = { new MyPostLoadListener(), new DefaultPostLoadEventListener() };
cfg.EventListeners().setPostLoadEventListeners(stack);