Hey guys,
I am moving a project (partly) from the Hibernate interface to the JPA interface, but for legacy reasons I still need access to the underlying sessionFactory. So I set up the following applicationContext.xml:
Now the problem is that transactions don't work when accessed from the sessionFactory. They work fine when using EntityManager directly. When I replace txManager by the one in comments, it doesn't work for sessionFactory and it doesn't work for EntityManager either.Code:<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="xx" /> <property name="url" value="xx" /> <property name="username" value="xx" /> <property name="password" value="xx" /> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="persistenceXmlLocation" value="META-INF/persistence.xml"/> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="false"/> </bean> </property> <property name="packagesToScan"> <list> <value>xx</value> </list> </property> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> </property> <property name="jpaProperties"> <props> <prop key="hibernate.current_session_context_class">thread</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">false</prop> </props> </property> </bean> <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- legacy access to session factory --> <bean id="sessionFactory" factory-bean="entityManagerFactory" factory-method="getSessionFactory" /> <!-- <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> --> <tx:annotation-driven transaction-manager="txManager" />
I have no idea how I can fix this issue. I have tried everything but I simply cannot get transactions to work.
Below is an example function I would use sessionFactory in:
Code:@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class) public void doSomething() { Session session = sessionFactory.getCurrentSession(); Bla bla = new Bla(); session.save(bla); // throws an error that there is no active transaction }


Reply With Quote