【问题标题】:Spring4 with Hibernate4 fails in standalone process带有 Hibernate4 的 Spring4 在独立进程中失败
【发布时间】:2014-04-30 01:13:54
【问题描述】:

我无法在独立进程中将 Spring4 与 Hibernate4 一起使用(没有像 tomcat、WAS 等容器)

如何在一个独立进程中同时使用 Hibernate4、Spring4 和 Spring 数据存储库?

但是我配置 Spring 我总是遇到同样的异常:

Caused by: java.lang.NullPointerException
at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:76)
at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:118)
at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149)

在谷歌搜索时,我得到了一些关于 hibernate.transaction.jta.platform 的信息,Hibernate 4.3 的文档在这里 http://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html_single/#services-JtaPlatform

但我看到的唯一选项是org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform,但这仍然会导致同样的错误。

这是我的 Spring 配置:

    <context:component-scan base-package="com.xx.yy" />
<jpa:repositories base-package="com.xx.zz.respositories"></jpa:repositories>

<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/culture" />
    <property name="username" value="root" />
    <property name="password" value="" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
    </property>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jtaDataSource" ref="dataSource" />
    <property name="packagesToScan" value="culture.matching.index.model" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="true" />
            <property name="showSql" value="false" />
            <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
            <property name="database" value="MYSQL" />
        </bean>
    </property>
    <property name="jpaProperties">
        <value>
            hibernate.transaction.jta.platform=org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform
        </value>
    </property>
</bean>

【问题讨论】:

  • 需要删除所有对 JTA 的引用 - 您没有 JTA 容器。另外,如果您使用的是 Spring 4,为什么还要使用 XML?
  • 您指的是哪些参考文献?我在配置中看到的对 JTA 的唯一引用是“jtaDataSource”,即使我将其更改为“dataSource”,也存在同样的问题。
  • Found a decent tutorial 应该可以帮助您启动和运行。
  • 我建议您看看 Spring Boot,它可以大大减少您需要为 Spring 应用程序(无论是 Web 应用程序还是独立应用程序)编写的配置量。看看这个链接github.com/spring-projects/spring-boot/tree/master/…
  • @BoristheSpider 很奇怪,您指向的教程也使用了“LocalContainerEntityManagerFactoryBean”

标签: java spring hibernate hibernate-4.x spring-4


【解决方案1】:

@geoand 的回答很有帮助:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-simple 因此我从 XML 迁移到 Java 配置

【讨论】:

  • 您好,您的参考资料已失效。请遵守规则 - 您必须始终直接包含重要的引文。只有证明和替代方案是您可以忽略的答案。
猜你喜欢
  • 2014-12-25
  • 2010-11-29
  • 2017-03-11
  • 2016-02-10
  • 2023-03-29
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多