当前位置: 首页 > 知识库问答 >
问题:

同时使用Hibernate和Spring数据?

苏志
2023-03-14

是否可以使用Spring数据JPA(以Hibernate作为JPA提供程序为后盾),同时直接使用Hibernate?

问题是,当我使用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"/>

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();
}
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 annotation指定)是否可以同时使用Spring JPA存储库和直接Hibernate调用,以及如何实现这一点?

共有1个答案

狄英哲
2023-03-14

使用EntityManager.Unwrap(Session.class)获取Hibernate会话并从会话对象检索会话工厂,而不是创建会话工厂。

还可以使用EntityManagerFactory.unwrap(SessionFactory.Class)直接获取Hibernate SessionFactory。

 类似资料:
  • 问题内容: 是否可以使用Spring Data JPA(由Hibernate作为JPA提供者支持)并同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,无法使用检索当前会话。当我切换到HibernateTransaction Manager时,JPA存储库无法提交更改。 这是我的Spring上下文的一部分(在该上下文中,我无法使用直接的Hibernate

  • 问题内容: 我正在使用Spring 3.0,Hibernate 3.0的项目中工作。我的项目具有Controller,Service和DAO层。Daos(用hibernate方式编写)可从服务层访问。现在的要求是,我需要同时使用Hibernate和JDBC。hibernate部分约为80-90%。对于剩余的10%,我必须使用简单的JDBC(可以使用JdbcTemplate)。请建议我,我该如何同时

  • 我试图确保:(1)我有一个连接池,当连接丢失时,它将管理与数据库的重新连接;(2)JDBC和Hibernate使用相同的数据源。 我说对了吗?

  • 我一直在hibernate中使用Spring数据,我想知道避免代码浪费的最佳类组织是什么。这是我的实际结构: 然后我使用这个接口 因此我实现了它 公共类DatabaseServicesImpl实现DatabaseServices{ }但我得到了这个例外

  • 问题内容: 我正在使用Spring JPA和Hibernate的项目。可以在Spring applicationContext.xml 文件中指定 persistence.xml中的 大多数内容。 __ 那么是否还需要 persistence.xml ? 谢谢。 问题答案: 更新: Spring 3.1将支持免费的JPA配置,请参阅Spring 3.1 M2:配置增强 。 darioo的答案适合实

  • 由于我是审计新手,请让我了解以上问题。 谢谢你。