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

我的配置:


IDE Intellij(Jetbrains)
Glassfish(EJB容器)
JPA实体(休眠提供程序)
具有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节


transaction-type属性用于指定实体是否
实体经理工厂为持久性提供的经理
单位必须是JTA实体管理器或资源本地实体管理器。
该元素的值为JTA或RESOURCE_LOCAL。交易类型
JTA假设将提供JTA数据源-
由jta-data-source元素指定或由容器提供。
通常,在Java EE环境中,事务类型为
RESOURCE_LOCAL假定将提供非JTA数据源。在
Java EE环境,如果未指定此元素,则默认
是JTA。在Java SE环境中,如果未指定此元素,
默认值为RESOURCE_LOCAL。


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

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

10-11 12:25