是否可以使用Spring Data JPA(由Hibernate作为JPA提供者支持)并同时直接使用Hibernate?
问题是,当我使用JpaTransactionManager时,无法使用检索当前会话org.hibernate.HibernateException: No Session found for current thread
。当我切换到HibernateTransaction
Manager时,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"/>
hibernate存储库示例:
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();
}
Spring数据存储库定义示例:
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>
因此,问题是-Spring JPA存储库和直接的Hibernate调用是否可以在同一事务中使用(由@Transactional注释指定),如何实现?
与其创建SessionFactory,不如使用EntityManager.unwrap(Session.class)
Hibernate
Session并从Session对象检索会话工厂。
您也可以使用EntityManagerFactory.unwrap(SessionFactory.class)
直接获取Hibernate
SessionFactory。
是否可以使用Spring数据JPA(以Hibernate作为JPA提供程序为后盾),同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,我无法使用检索当前会话。当我切换到HibernateTransaction管理器时,JPA存储库无法提交更改。 下面是Spring上下文的部分(对于该上下文,我无法使用直接的Hibernate调用): hibernate
我一直在hibernate中使用Spring数据,我想知道避免代码浪费的最佳类组织是什么。这是我的实际结构: 然后我使用这个接口 因此我实现了它 公共类DatabaseServicesImpl实现DatabaseServices{ }但我得到了这个例外
问题内容: 我正在使用Spring 3.0,Hibernate 3.0的项目中工作。我的项目具有Controller,Service和DAO层。Daos(用hibernate方式编写)可从服务层访问。现在的要求是,我需要同时使用Hibernate和JDBC。hibernate部分约为80-90%。对于剩余的10%,我必须使用简单的JDBC(可以使用JdbcTemplate)。请建议我,我该如何同时
我知道SpringDataJPA使用Hibernate,但是,我有一些问题需要澄清。 > 与使用hibernate会话和HQL相比,使用@Query编写自定义查询有哪些优势? 使用SpringDataJParepository查询方法和使用HibernateHQL之间有什么性能差异吗? 我在这里看到了其他类似的问题,他们没有回答这些问题。
我有一个带有spring Boot(v2.3.3)和spring数据的spring web应用程序。我的评估表包含以下列: Id 我的用例是表中名称和地址的任何更改评估应该创建一个新行,版本以相同的id递增。 因此,基本上只有当地址或姓名更新时,才能在评估表中插入新记录。下面是一个示例: 现有记录: 例如,名称已更新为Ryan,应该有两行,如下所示: 因此,基本上,任何名称和地址的变化都应在评估表
由于我是审计新手,请让我了解以上问题。 谢谢你。