- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图将实体对象从一个数据库移动到另一个数据库,但没有成功。示例代码:
EntityManagerFactory emfFrom = Persistence.createEntityManagerFactory(fromPU);
EntityManager emFrom = emfFrom.createEntityManager();
EntityManagerFactory emfTo = Persistence.createEntityManagerFactory(toPU);
EntityManager emTo = emfTo.createEntityManager();
//Code to create sql for example 'select row from order row' where order is an entity
Query q = emFrom.createQuery(sql);
for(Object o: q.getResultList()) {
emFrom.detach(o);
emTo.persist(entity);
}
这导致:
Exception in thread "main" >org.apache.openjpa.persistence.EntityExistsException: Attempt to persist detached object "Order-1". If this is a new instance, make sure any version and/or auto-generated primary key fields are null/default when persisting. FailedObject: Order-1 at org.apache.openjpa.kernel.BrokerImpl.persistInternal(BrokerImpl.java:2628) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2571) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2554) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2458) at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1077) at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:716)
我尝试使用合并而不是持久化,但数据库中没有保存任何行。我还尝试使用反射(因为它是私有(private)的)将 id 字段设置为 null,如下所示:
Field f = o.getClass().getDeclaredField("id");
f.setAccessible(true);
f.set(o, null);
但运气不好。我无法将版本字段设置为 null,因为它已经很长时间了,而 id filed 是一个 Long。我不知道这是否有帮助。
我正在使用 java 7 和 openjpa 2.2。关于如何移动实体的任何想法都会很棒。谢谢。
最佳答案
你混淆了你的 JPA 提供者,因为它会将你的实体包装在一个代理中,其中包含详细说明它相对于数据库的状态类型的信息(例如,它知道它已成功加载并且没有被修改)所以调用'使用不同的底层数据库保存'没有意义。
您需要创建该对象的副本(本质上是一个字段一个字段),然后持久化它,以便您的 JPA 提供者认为它是一个插入,而不是一个更新。
现在您可能会说您不想复制每个字段 - 它容易出错并且需要一段时间。一个好的技巧是转换为 JSON,然后再返回到新对象。
看看 Google 的 GSON:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
例如:
final SomeEntity oldInstance = new SomeEntity("hello");
final Gson gson = new Gson();
final String json = gson.toJson(oldInstance);
final SomeEntity newInstance = gson.fromJson(json, oldInstance.getClass());
您将需要 getters/setters 和非最终字段来执行此操作,因为 JSON 库在类上使用反射,否则您将不得不手动编写某种复制构造函数或构建器来逐字段执行此操作
关于java - 如何使用 openjpa 将实体从一个数据库移动到另一个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23062033/
查看在数据库中执行的 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();
我是一名优秀的程序员,十分优秀!