2012-04-05 85 views
0

我想在Spring事务中使用Hibernate和JPA。所有人都应该工作,但我想我错过了配置中的一些东西。JPA休眠春天 - 没有交易打开

我的persistence.xml文件:

<persistence-unit name="pzk" transaction-type="RESOURCE_LOCAL"> 
    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="validate" /> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.transaction.flush_before_completion" 
      value="true" /> 
     <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" /> 
    </properties> 
</persistence-unit> 

我的DB-context.xml文件:

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true" /> 
      <property name="generateDdl" value="true" /> 
      <property name="databasePlatform" value="${db.dialect}" /> 
     </bean> 
    </property>  
</bean> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="${db.driver}" /> 
    <property name="url" value="${db.url}" /> 
    <property name="username" value="${db.username}" /> 
    <property name="password" value="${db.password}" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
</bean> 


<bean 
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

当然,我有<tx:annotation-driven>, <context:annotation-config>,<context:component-scan basepackage="bla.bla.bla">和我的服务被标记为@Transactional(试图标记方法,类和两者)

问题是,当我尝试使用服务中的模型类的集合时,我得到LazyInitializationException。调试显示没有事务正在进行中。你能帮忙吗?

P.S.渴望提取工作,但这不是一个选项

+0

我也推荐使用entityManagerFactory的''来摆脱persistence.xml文件。 – JMelnik 2012-04-05 06:49:13

回答

0

尝试指出你的transactionManager应该使用哪个entityManagerFactory。

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean>