【问题标题】:JPA - insert into select - copy large amount of recordsJPA - 插入选择 - 复制大量记录
【发布时间】:2013-06-16 10:02:06
【问题描述】:

我想复制具有不同键值的记录。最好的方法是什么? 在普通的 sql 中我会这样做:

insert into tableX values (x1,x2,x3,x4,x5) select 2,T1.x2,T1.x3,T1.x4,T1.x5 from tableX T1

(x1 是我的主键)。 我尝试在实体@NamedQuery 中编写此代码,但我得到了org.eclipse.persistence.exceptions.JPQLException,在搜索了一种编写方法后,我了解到无法在NamedQuery 中编写此sql - 对吗?

我还尝试循环遍历表示 tableX 的对象列表,并且对于我所做的每个对象 em.find() 或创建一个新对象,然后使用 em.persist 插入它——但这似乎是一种低效的方式。 (使用 find 时,我为每个对象进行选择,所以如果我有一个包含 2000 条记录的列表,那么创建 2000 条选择然后插入新的键值是没有意义的)。

所以我的问题是实现复制所有记录的最佳方法是什么? 此外,如果我遇到异常或出现问题,我想回滚,这样我的数据库表中就不会只有部分记录了。

提前致谢。

【问题讨论】:

    标签: jpa jpql named-query


    【解决方案1】:

    您可以通过本机查询在 JPA 中使用任何 SQL。 SQL 最适合这种类型的插入。

    如果您需要在插入数据之前在 Java 中对数据执行任何操作,那么您将查询对象,然后插入它们。启用批量写入以提高效率。

    http://java-persistence-performance.blogspot.com/2013/05/batch-writing-and-dynamic-vs.html

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 2021-11-06
      • 2018-03-01
      • 2016-01-30
      • 2020-09-04
      • 2010-11-01
      • 1970-01-01
      • 2022-12-18
      • 2014-11-19
      相关资源
      最近更新 更多