2

我正在从事的项目使用 Hibernate 来实现持久性。

该项目分为子项目,其中四个与此处相关:

  • 消息域
  • 用户服务
  • 消息服务
  • 个案服务

Message 实体(在 user-dom 中)包含一个String userID字段和一个@Transient String userName字段。另一个实体 Case 与 Message 具有 OneToOne 关系。问题如下:

  • 每次我们加载消息时(直接在消息服务中,或者通过在案例服务中加载案例间接),我们需要设置它的 userName 字段。
  • 通过调用用户服务检索用户名。
  • 不能从 message-dom 调用用户服务(出于依赖性原因)。

我已经看到实体有一个 @PostLoad 注释,但显然这些在这里没有帮助,因为我们无法从实体调用服务。目前我们手动进行服务调用,但这很容易出错(尤其是在案例中间接加载消息时)。

我们如何确保每次加载 Message 实体时都设置该字段?

4

1 回答 1

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);
于 2012-11-28T20:15:14.807 回答