我一直在将一个项目从JPA转移到Hibernate本机实现(由团队投票:<)。
我必须处理的一件很棒的事情是@PostLoad不能与Hibernate本机库一起使用。所以我用Google搜索了一下。
首先我研究了EventListeners - >不,Configuration类似乎不再允许你设置它。当我将它注入cfg文件时,听众仍然拒绝工作。
好的,接下来,我研究了拦截器 - >不,没有后载。实例化也不传递对象本身。多么方便。
最后,我调查了LifeCycle - >哇,是的,它有onLoad(),但它传入Session和Serializable Id但没有对象。好的。
无论如何,我想要的只是使用名为onPostLoad(Object object,yadda yadda yadda)的处理函数来监听后加载。有没有人有好的建议?
答案 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