2012-04-05 12 views
0

Ich versuche Hibernate mit JPA in Spring-Transaktionen zu verwenden. Alles sollte funktionieren, aber ich denke, ich habe etwas in der Konfiguration verpasst.JPA Hibernate Spring - keine Transaktion geöffnet

Meine persistence.xml Datei:

<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> 

Meine db-context.xml Datei:

<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" /> 

Natürlich habe ich <tx:annotation-driven>, <context:annotation-config>,<context:component-scan basepackage="bla.bla.bla"> und meine Dienste als @Transactional markiert (versucht, Methoden zu markieren, Klassen und beide)

Das Problem ist, wenn ich versuche, Sammlung einer Modellklasse im Dienst zu verwenden, bekomme ich LazyInitializationException. Debug zeigte, dass keine Transaktion ausgeführt wird. Könntest du bitte dabei helfen?

P.S. Eager fetching funktioniert, aber das ist keine Option

+0

Ich würde auch empfehlen entityManagerFactory '', um Persistence.xml-Datei loszuwerden. – JMelnik

Antwort

0

Versuchen Sie, auf Ihren transactionManager zu zeigen, mit welcher entityManagerFactory es arbeiten soll.

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