Java Hibernate拦截器和proxyTargetClass的用途是什么
我是hibernate和spring的新手,正在尝试学习hibernate拦截器的使用。 我查阅了社区文档,上面说 此拦截器将新的Hibernate会话绑定到 方法调用,如果是任何方法,则关闭并随后移除它 结果。如果已经有一个预先绑定的会话(例如从 HibernateTransactionManager,或来自周围环境 Hibernate拦截方法),拦截器只参与 它 但我不明白我们什么时候用这个,为什么用这个 什么时候创建这样的taskDaoJava Hibernate拦截器和proxyTargetClass的用途是什么,java,hibernate,spring,Java,Hibernate,Spring,我是hibernate和spring的新手,正在尝试学习hibernate拦截器的使用。 我查阅了社区文档,上面说 此拦截器将新的Hibernate会话绑定到 方法调用,如果是任何方法,则关闭并随后移除它 结果。如果已经有一个预先绑定的会话(例如从 HibernateTransactionManager,或来自周围环境 Hibernate拦截方法),拦截器只参与 它 但我不明白我们什么时候用这个,为什么用这个 什么时候创建这样的taskDao <bean name="abstractDao
<bean name="abstractDao" abstract="true">
<property name="hibernateTemplate" ref="taskHibernateTemplate"/>
</bean>
<bean id="taskHibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
<property name="sessionFactory" ref="taskSessionFactory"/>
</bean>
<bean id="taskDaoTarget" class="com.xyz.abc.backgroundtask.impl.TaskDao" parent="abstractDao"/>
<bean id="taskDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass" value="true"/>
<property name="interceptorNames">
<list>
<value>taskHibernateInterceptor</value>
<value>taskDaoTarget</value>
</list>
</property>
</bean>
<bean name="abstractDao" abstract="true">
<property name="hibernateTemplate" ref="taskHibernateTemplate"/>
</bean>
<bean id="taskDao" class="com.xyz.zbc.backgroundtask.impl.TaskDao" parent="abstractDao"/>
任务HibernateInterceptor
taskDaoTarget
什么时候创建这样的taskDao
<bean name="abstractDao" abstract="true">
<property name="hibernateTemplate" ref="taskHibernateTemplate"/>
</bean>
<bean id="taskHibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
<property name="sessionFactory" ref="taskSessionFactory"/>
</bean>
<bean id="taskDaoTarget" class="com.xyz.abc.backgroundtask.impl.TaskDao" parent="abstractDao"/>
<bean id="taskDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass" value="true"/>
<property name="interceptorNames">
<list>
<value>taskHibernateInterceptor</value>
<value>taskDaoTarget</value>
</list>
</property>
</bean>
<bean name="abstractDao" abstract="true">
<property name="hibernateTemplate" ref="taskHibernateTemplate"/>
</bean>
<bean id="taskDao" class="com.xyz.zbc.backgroundtask.impl.TaskDao" parent="abstractDao"/>
您必须使用Hibernate拦截器吗?因为我建议您使用Spring的(基于注释的)。它是许多受支持的底层技术的通用抽象 基本上,您要做的是定义TransactionManager Bean,在使用JPA的Hibernate的情况下:
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf"/>
</bean>
没有JPA:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
在这两种情况下,激活基于注释的事务:
<tx:annotation-driven />
或者,如果不使用接口:
<tx:annotation-driven proxy-target-class="true" />
现在用@Transactional
注释您的服务层方法或类,您将自动获得在服务方法范围内创建的会话
我建议您不要使用HibernateInterceptor和HibernateTemplate,它们都不再是现代的做事方式
阅读:
- 或者,如果您使用JPA:
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf"/>
</bean>
没有JPA:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
在这两种情况下,激活基于注释的事务:
<tx:annotation-driven />
或者,如果不使用接口:
<tx:annotation-driven proxy-target-class="true" />
现在用@Transactional
注释您的服务层方法或类,您将自动获得在服务方法范围内创建的会话
我建议您不要使用HibernateInterceptor和HibernateTemplate,它们都不再是现代的做事方式
阅读:
- 或者,如果您使用JPA: