我正在尝试使用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/