JPA - 插入选择 - 复制大量记录

时间:2013-06-19 18:22:00

标签: jpa jpql named-query

我想复制具有不同键值的记录。最好的方法是什么? 在普通的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并且在搜索了一种写入它的方法之后我明白这个sql不能在NamedQuery内进行 - 这是正确的吗?< / p>

我还尝试循环遍历表示tableX的对象列表以及我做的每个对象em.find()或创建一个新对象然后用em.persist插入 - 但这似乎是一种低效的方式。 (当使用find我为每个对象做一个select时,所以如果我有一个2000个记录的列表,那么创建2000个selectes然后插入新的键值就有意义了。)

所以我的问题是实现复制所有记录的最佳方法是什么? 如果我得到一个例外,或者出了什么问题我想回滚,以便我不会在我的数据库表中只有部分记录。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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

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