java - 加载 hibernate 实体时始终调用方法

标签 java hibernate

我正在从事的项目使用 Hibernate 进行持久化。

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

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

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

  • 每次我们加载消息(无论是直接在消息服务中,还是通过在案例服务中间接加载案例),我们都需要设置其 userName 字段。
  • 通过调用用户服务来检索用户名。
  • 无法从 message-dom 调用用户服务(由于依赖性原因)。

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

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

最佳答案

在所有部分组合在一起的最终应用程序中实现 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);

关于java - 加载 hibernate 实体时始终调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606258/

相关文章:

java - hibernate + Spring + Tomcat

java - Spring Data JPA 规范中三表连接中允许空集

java - 如何在 jcombobox 中显示泰米尔语和英语字符 - java

java - 使用 JButton 从另一个类运行主类

java - nexus:无法从/到 nexus 传输 Artifact (http://localhost:8081/repository/maven-proxy-test/)

java - ClassName.this 是什么?

java - Hibernate 和 JUnit

java - Hibernate工具Pojo Generation默认使用Set

java - 从类创建 HSQL 创建表查询

java - Hibernate orphanRemoval是否可以在唯一的约束下工作?