是否可以使用Spring Data JPA(由Hibernate作爲JPA提供程序支持)並同時直接使用Hibernate?同時使用Hibernate和Spring數據jpa?
的問題是,當我使用JpaTransactionManager接口,我不能夠與org.hibernate.HibernateException: No Session found for current thread
檢索當前會話。當我切換到HibernateTransaction管理器時,JPA存儲庫不能提交更改。
這裏是我的Spring上下文的部分(帶有這方面我不能使用直接Hibernate調用):
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/IPGCONF"/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="entityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<jpa:repositories base-package="com.satgate"/>
休眠庫的例子:
public Collection<Layer> listCurrent(Carrier carrier) {
Criteria query = sessionFactory.getCurrentSession()
.createCriteria(Layer.class)
.add(Restrictions.eq("carrier", carrier));
query.createCriteria("bitrate")
.addOrder(Order.desc("bitrate"))
.add(Restrictions.eq("symbolrate", carrier.getSymbolrate()));
return query.list();
}
春天的實例數據存儲庫定義:
public interface BitrateRepository extends PagingAndSortingRepository<Bitrate, Long> { }
軟件版本:
<org.springframework.version>4.0.0.RELEASE</org.springframework.version>
<org.springframework.data.version>1.4.3.RELEASE</org.springframework.data.version>
<hibernate.version>4.3.0.Final</hibernate.version>
所以,問題是 - 是否有可能在同一個事務(由@Transactional註解指定)中使用Spring JPA存儲庫和直接Hibernate調用以及如何實現?
如果您包含該軟件包,它會稍微有點幫助。在Spring中有數十億個包,而Eclipse本身並沒有找到一個EntityManager ... – user1944491
因此,您需要JPA javax.persistence.EntityManager –