java - Hibernate 启用 PostLoad 事件

标签 java hibernate events loading

我目前正在尝试在从数据库加载模型后使用@PostLoad注释进行一些处理。但目前看来我的方法不会被触发。我不使用 EntityManager,因此我正在寻找一种启用此事件行为的方法。

我的配置如下:

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider
        </property>
        <property name="hibernate.connection.tinyInt1isBit">true</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testing</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.connection.pool_size">1</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- OUTPUT STUFF -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.use_sql_comments">false</property>
        <property name="hibernate.format_sql">false</property>
        <!-- SESSION CONTEXT -->
        <property name="hibernate.current_session_context_class">thread</property>
        <!-- CONNECTION POOL hikariCP -->
        <property name="hibernate.hikari.maximumPoolSize">25</property>
        <property name="hibernate.hikari.idleTimeout">30000</property>
        <property name="hibernate.hikari.dataSource.url">jdbc:mysql://localhost:3306/testing</property>
        <property name="hibernate.hikari.dataSource.user">root</property>
        <property name="hibernate.hikari.dataSource.password"></property>
        <property name="hibernate.hikari.dataSource.cachePrepStmts">true</property>
        <property name="hibernate.hikari.dataSource.prepStmtCacheSize">250</property>
        <property name="hibernate.hikari.dataSource.prepStmtCacheSqlLimit">2048</property>
        <property name="hibernate.hikari.dataSource.useServerPrepStmts">true</property>
        <!-- Include the mapping entries -->
        <mapping class="at.adtime.core.v1.model.User"/>
        <mapping class="at.adtime.core.v1.model.Test"/>
    </session-factory>
</hibernate-configuration>

更新:

我有一个名为 afterUserLoad 的方法,如下所示:

@PostLoad
public void afterUserLoad() {
    ArrayList<String> computedIds = new ArrayList<String>();
    for (Test test : this.Test) {
        computedIds.add(test.getId());
    }
    this.setTestIds(computedIds);
}

它应该加载 Test List 并仅将 ids 放入 ArrayList 中。

最佳答案

@PostLoad 处理至少从 5.2.17 版本开始在 Hibernate 中实现。

关于java - Hibernate 启用 PostLoad 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26576073/

相关文章:

java - Java 中的 "runtime class"是什么?

java - 策略设计模式: Calling constructor of behavioral class

eclipse - 使用 PostgreSQL 9.3 使用 JPA 2.0 配置 STS

java - Hibernate 仅更新选定的列而不是所有修改的字段

java - 为什么递归循环中的局部变量会被覆盖? Java For 循环内的递归循环

java - 如何在事务开始之前或提交之前执行操作?

java - 即使命名良好,参数也不作为命名参数存在

javascript - Node.js 请求数据事件未触发。我究竟做错了什么?

javascript - 按下按键时如何移动鼠标光标?

jquery - 使用 jQuery 按住 Shift + 鼠标悬停