Hibernate Interceptor PostLoad

时间:2012-10-04 22:47:07

标签: hibernate events orm interceptor

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

我必须处理的一件很棒的事情是@PostLoad不能与Hibernate本机库一起使用。所以我用Google搜索了一下。

首先我研究了EventListeners - >不,Configuration类似乎不再允许你设置它。当我将它注入cfg文件时,听众仍然拒绝工作。

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

最后,我调查了LifeCycle - >哇,是的,它有onLoad(),但它传入Session和Serializable Id但没有对象。好的。

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

通常一个好主意来命名你要问的事物的版本......

  

EventListeners - &gt;不,配置类似乎不再允许你设置它

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