java - Persistence.XML JavaEE 与 EJB 和 Intellij

标签 java xml jpa intellij-idea glassfish

我正在尝试使用 IntelliJ IDEA 配置 JavaEE 项目。

我的配置:

  • IDE Intellij (Jetbrains)
  • Glassfish(EJB 容器)
  • JPA 实体(Hibernate 提供程序)
  • 使用 WAMP 的数据库(在 persistence.xml 中配置)

不幸的是,当我启动我的项目时,显示 404 页面: EJBTransactionRolledbackException。

我不明白这个异常或这个问题...也许这是我的文件 persistence.xml :

 <?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="PU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
        <property name="hibernate.connection.user" value="root" />
        <property name="hibernate.connection.password" value="root" />
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/supbartering" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
</persistence-unit>
</persistence>

我使用它:

@PersistenceContext(unitName = "PU")
private EntityManager mEntityManager;

这是我第一次将 Intellij 与 JEE 项目和 GlassFish 服务器一起使用,但我无法实现良好的配置。

最佳答案

您正在使用 Hibernate 特定的“本地数据源”属性,但您声称想要使用 JTA 事务。这是不一致的。请参阅 JPA 规范第 8.2.1.2 节

The transaction-type attribute is used to specify whether the entity managers provided by the entity manager factory for the persistence unit must be JTA entity managers or resource-local entity managers. The value of this element is JTA or RESOURCE_LOCAL. A transaction-type of JTA assumes that a JTA data source will be provided—either as specified by the jta-data-source element or provided by the container. In general, in Java EE environments, a transaction-type of RESOURCE_LOCAL assumes that a non-JTA datasource will be provided. In a Java EE environment, if this element is not specified, the default is JTA. In a Java SE environment, if this element is not specified, the default is RESOURCE_LOCAL.

因此,您可以使用 JTA,在外部定义 JTA 数据源,并在 persistence.xml 中指定“jtaDataSource”(并删除 url/用户/密码/驱动程序),或者使用 RESOURCE_LOCAL 事务并通过以下方式定义数据源连接 URL/用户/密码/驱动程序属性(并使用标准 javax.persistence 属性,如 this link 显示)。

关于java - Persistence.XML JavaEE 与 EJB 和 Intellij,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34876905/

相关文章:

jpa - openJPA批量更新模式

java - 具有不同属性名称的相似 Spring 组件

java - XOM 规范化耗时过长

c# - 解析 XML 时检查元素是否存在

python - 在 Python 中解析巨大的、编码错误的 XML 文件

java - 使用 JPA 进行更新的最佳方法

java - BIT(1) HIbernate JPA 映射

java - 如何在 Java 9 中枚举非系统模块

java - 为什么我的 split 太过雄心勃勃?

xml - XSLT 格式化输出已完成 90%