- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我的测试代码:
package jee.jpa2;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@Test
public class Tester {
EntityManager em;
EntityTransaction tx;
EntityManagerFactory emf;
@BeforeClass
public void setup() {
emf = Persistence.createEntityManagerFactory("basicPU", System.getProperties());
}
@Test
public void insert() {
Item item = new Item();
for (int i = 0; i < 1000; ++i) {
em = emf.createEntityManager();
tx = em.getTransaction();
tx.begin();
item.setId(null);
em.persist(item);
tx.commit();
em.clear();
em.close();
tx=null;
em=null;
}
}
@Test
public void read() {
em = emf.createEntityManager();
tx = em.getTransaction();
tx.begin();
Query findAll = em.createNamedQuery("findAll");
List<Item> all = findAll.getResultList();
for (Item item : all) {
System.out.println(item);
}
tx.commit();
}
}
这是实体:
package jee.jpa2;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
@Entity
@NamedQuery(name="findAll", query="SELECT i FROM Item i")
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false, updatable= false)
protected Long id;
protected String name;
public Item() {
name = "Digambar";
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return String.format("Item [id=%s, name=%s]", id, name);
}
}
执行测试后出现错误:
Item [id=1, name=Digambar]
Item [id=2, name=Digambar]
PASSED: read
FAILED: insert
<openjpa-2.0.0-r422266:935683 nonfatal store error> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist detached object "jee.jpa2.Item-2". If this is a new instance, make sure any version and/or auto-generated primary key fields are null/default when persisting.
FailedObject: jee.jpa2.Item-2
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2563)
at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:705)
at jee.jpa2.Tester.insert(Tester.java:33)
请解释这里发生了什么?
最佳答案
为了严格回答问题标题,运行时增强是使用可以在使用 JDK 1.6 时动态加载的 javaagent 完成的(这在 Entity Enhancement 中有记录)。
关于您面临的问题,我怀疑它是一个 OpenJPA 错误(我见过几个类似问题,例如 OPENJPA-755 ),错误消息与您的代码不一致,因为您正在将主键字段设置为 null
并且没有任何版本字段。你应该报告它。
也就是说,“解决”该问题的一种简单方法是在循环内创建一个新的 Item
实例。像这样:
public void insert() {
for (int i = 0; i < 1000; ++i) {
Item item = new Item();
em = emf.createEntityManager();
tx = em.getTransaction();
tx.begin();
em.persist(item);
tx.commit();
em.clear();
em.close();
tx=null;
em=null;
}
}
补充说明:
为什么在创建 EntityManagerFactory
时传递 System.getProperties()
?
您应该在测试结束时关闭 EntityManagerFactory
:
@AfterClass
public static void closeEntityManagerFactory() {
emf.close();
}
更新:回答评论。来自 JPA 规范:
3.2 Entity Instance’s Life Cycle
This section describes the EntityManager operations for managing an entity instance’s lifecycle. An entity instance may be characterized as being new, managed, detached, or removed.
- A new entity instance has no persistent identity, and is not yet associated with a persistence context.
- A managed entity instance is an instance with a persistent identity that is currently associated with a persistence context.
- A detached entity instance is an instance with a persistent identity that is not (or no longer) associated with a persistence context.
- A removed entity instance is an instance with a persistent identity, associated with a persistence context, that is scheduled for removal from the database.
因此,如果您有一个分离的实体(因此不与持久上下文相关联)并且如果您将带注释的Id
字段设置为null
(因此它没有持久身份),那么无论 OpenJPA 行为如何,您都拥有规范定义为新实体的内容。这就是为什么我认为这是 OpenJPA 中的错误(并且错误消息无论如何都是不连贯的)。
关于java - openjpa2.0如何在运行时增强实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3005296/
查看在数据库中执行的 SQL 查询的 OpenJPA 配置是什么?我想查看在日志或控制台中执行的所有参数的查询,而不是查看 JPQL 查询 最佳答案 启用所有 SQL 语句的日志记录,减去参数值。
我创建了一个包含一张表的数据库:users DROP DATABASE IF EXISTS DB_TEST; CREATE database DB_TEST; USE DB_TEST; -- ----
任何人都可以解释为什么我会收到此错误(下面的完整堆栈跟踪): Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: You hav
在 Open JPA 注释处理器/maven 插件上收到此警告?有什么问题吗?在另一个项目中我没有收到此警告。 [WARNING] diagnostic: warning: The following
我试图为使用 Apache TomEE Maven 插件开发的 Java Enterprise Web 应用程序编写测试。该应用程序运行良好,一切似乎都正常运行。我考虑使用 JUnit Jupiter
我在使用 SQLite 的 JPA 中遇到此错误,我不知道为什么会出现这种情况,有帮助吗? 我的 persistence.xml: org.apache.openjpa.
我正在尝试将应用程序从 WLP 迁移到 Tomcat,在尝试部署 war 时,出现以下异常 org.apache.openjpa.persistence.ArgumentException:此配置不允
我对 OpenJPA 的一个问题感到头疼。 我有一个方法: public void update() { System.out.println("START: Update...");
OpenJPA 是否支持类似于 Hibernate 的批量插入? ?我没有在文档中找到它,但我希望我错过了它。我知道JPA doesn't support it in general . 最佳答案 简
我在带有 DB2 的 WebSphere 上使用 OpenJPA 1.2.3。有没有一种方法可以构建和捆绑我的应用程序,允许同一应用程序 (EAR) 根据环境(DEV、ACPT、PROD 等)更改架构
OpenJPA 2.3.x 的删除顺序发生错误,我不知道为什么。 鉴于这些 JPA 映射 // grandparent @Entity @Table(name = "three_phase_motor
有没有办法按照它们的顺序获取列 在 Java 类中声明,还是以其他方式指定顺序? 我正在使用映射工具 ant 任务在 sql 文件中为我的类生成 DDL。 最佳答案 不,JPA 的每个实现都可以按照它
我正在使用 TomEE 1.5.2 服务器,我想知道在哪里可以找到 openejb.xml文件? 我必须配置这个文件,就像那里: http://tomee.apache.org/openjpa.htm
我是 OpenJPA 新手我正在尝试将数据插入到一个表中,其中一些数据来自另一个表。下面是场景。 Table1: id, app_name, app_version, app_active Tabl
嗨,我需要使用 and or 条件进行复杂的查询。但 and 条件似乎覆盖了 or 条件,这是我的代码: public List search(CartesioPojo params) { C
我想知道我使用 OpenJpa 2 保存实体的方式是否正确。 我从反序列化的休息服务接收对象,然后保存此实例: 开始交易 从数据库检索实例(即使我已经获得了该实例) 将属性从分离的实例复制到从数据库检
如何将 openjpa 设置为在查询前刷新。当我更改数据库中的某些值时,我想将这些更改传播到应用程序中。 我在 persistence.xml 中试过这个设置: false/true - same
是否可以将以下内容翻译成(Open)JPA? select t0.* from Person t0 left outer join Car t1 on t0.id = t1.id_person and
我正在尝试在现有的 Maven 项目中生成元模型。该项目已经有一些数据源,在生成源中生成了元模型。 我需要将新数据库中的表添加到此应用程序。我为 XML 配置生成了 Java 类和条目。下面的构建日志
我有以下查询方法,但性能较低: @Override public Map getFeatureCounts() { StopWatch timer = new StopWatch();
我是一名优秀的程序员,十分优秀!