1

我一直在将一个项目从 JPA 转移到 Hibernate 本机实现(被团队否决:<)。

我必须处理的一件美妙的事情是@PostLoad 不适用于 Hibernate 本机库。所以我google了一下。

首先,我查看了 EventListeners -> 不,配置类似乎不再允许您设置它。而当我将它注入到 cfg 文件中时,监听器仍然拒绝工作。

好的,接下来,我查看了拦截器 -> 不,没有后加载。实例化也不会传入对象本身。多么方便。

最后,我查看了 LifeCycle -> 哇,是的,它有 onLoad(),但它传入了 Session 和一个可序列化的 Id,但没有对象。好的。

无论如何,我想要的只是使用名为 onPostLoad(Object object, yadda yadda yadda) 的处理程序函数来监听后加载。有没有人有好的建议?

4

2 回答 2

0

拦截器确实有onLoad()方法。你检查过吗?它的签名如下所示:

@Override
public boolean onLoad(Object entity, Serializable id, Object[] state,
        String[] propertyNames, Type[] types) {
    // TODO Auto-generated method stub
    return super.onLoad(entity, id, state, propertyNames, types);
}

请注意,如果您更改实体中的属性,则必须返回 true,否则返回 false(例如,您只是在计算实体)。

如果您使用的是 Spring,您将像这样连接您的拦截器:

<bean id="sessionFactory"       class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="entityInterceptor">
        <bean class="my.company.MyInterceptor"/>
    </property>
</bean>
于 2012-10-04T22:57:26.470 回答
0

一般来说,命名您所询问的事物的版本是一个好主意......

EventListeners -> 不,配置类似乎不再让你设置它

所以你使用的是 4.x 我假设?在 4.x 中,EventListener 是在 Hibernate 4 中添加的服务基础架构的一部分。请查看http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/#integrators

于 2012-10-05T01:00:22.290 回答