Java 托米+;OpenJPA+;IntelliJ实体不';不坚持
我在IntelliJ中创建了一个“JavaEEWeb模块”项目。然后,我编写了一个接受JSON输入的JaxRS注释类。然后,我用数据填充带注释的实体,并尝试使用托管持久性上下文持久化它Java 托米+;OpenJPA+;IntelliJ实体不';不坚持,java,jpa,intellij-idea,apache-tomee,Java,Jpa,Intellij Idea,Apache Tomee,我在IntelliJ中创建了一个“JavaEEWeb模块”项目。然后,我编写了一个接受JSON输入的JaxRS注释类。然后,我用数据填充带注释的实体,并尝试使用托管持久性上下文持久化它 @无国籍 @路径(“/状态”) 公共类状态控制器{ @PersistenceContext(unitName=“testunit”) 私人实体管理者; @职位 @路径(“/session\u new”) @产生({MediaType.APPLICATION_JSON}) @使用({MediaType.APPLI
@无国籍
@路径(“/状态”)
公共类状态控制器{
@PersistenceContext(unitName=“testunit”)
私人实体管理者;
@职位
@路径(“/session\u new”)
@产生({MediaType.APPLICATION_JSON})
@使用({MediaType.APPLICATION_JSON})
公共响应会话\u新建(最终CustomerSessionRequest请求){
CustomerSessions cs=新的CustomerSessions(请求会话数据);
em.c;
em.flush();
System.out.println(“保存的新CustomerSession:+cs.getCustomerSessionId());
返回Response.ok(cs.build();
}
}
我在IntelliJ中配置了一个名为“testdb”的数据源,以及一个名为“testunit”的持久化单元,它在持久化工具窗口中映射到该数据源
我的持久性XML如下所示:
2) 如果我尝试使用
@PersistenceUnit
注释创建EntityManagerFactory
,同样的初始问题也会出现。我缺少两件事:
对象(我没有指定)
想要,因为我希望它与应用程序一起部署)。我发现
这可以在WEB-INF
中的resources.xml
文件中完成,或者
META-INF
目录我仍然没有解释为什么应用程序管理(手动创建)的持久性上下文最初可以工作,但至少现在我让它一直工作。当您返回响应时,浏览器可以看到
响应ok
状态代码?您的事务管理器配置是否正确?我怀疑它在提交交易时失败了。@Rp-是的,我正在用Chrome中的Postman进行测试,结果返回的很好,ID字段中填充了一个新的ID。坦率地说,似乎在某个地方保存了一个我找不到的神奇的不可见数据库。因为我使用的是托管持久性上下文,所以我没有写任何关于TransactionManager的内容。如果这有帮助,当我停止服务器时,我会收到以下信息消息:“2014年1月27日上午10:02:39 org.apache.openejb.assembler.classic.assembler销毁资源信息:关闭数据源:默认JDBC数据库2014年1月27日上午10:02:39 org.apache.openejb.assembler.classic.assembler销毁资源信息:关闭数据源:默认非托管JDBC数据库J“。我希望这是我的数据源。您的类路径中是否有任何与h2
或hsqldb
相关的JAR?尝试删除它们,并尝试它们是否失败以及类未找到异常。不,除非TomEE自己带来这些异常。。。
<persistence-unit name="testunit">
<jta-data-source>testdb</jta-data-source>
<class>datamodels.testdb.CustomerSessions</class>
<properties>
<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/testdb"/>
<property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
<property name="openjpa.ConnectionUserName" value="testuser"/>
<property name="openjpa.ConnectionPassword" value="testpassword"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
</properties>
</persistence-unit>
</persistence>
EntityManagerFactory emf = Persistence.createEntityManagerFactory("testunit");
EntityManager em = emf.createEntityManager();
try {
em.getTransaction().begin();
CustomerSessions cs = new CustomerSessions(req.session_data);
em.persist(cs);
em.flush();
em.getTransaction().commit();
System.out.println("New CustomerSession saved: " + cs.getCustomerSessionId());
return Response.ok(cs).build();
} catch (Exception ex) {
em.getTransaction().rollback();
return Response.serverError().entity("An exception occurred").build();
}