2

我想复制具有不同键值的记录。最好的方法是什么?在普通的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- 对吗?

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

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

提前致谢。

4

1 回答 1

0

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

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

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

于 2013-06-20T14:07:06.350 回答