Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA-插入选择-复制大量记录_Jpa_Jpql_Named Query - Fatal编程技术网

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

JPA-插入选择-复制大量记录,jpa,jpql,named-query,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.jpqleexception,在搜索了编写它的方法之后,我明白了此sql不能在Nam

我想复制具有不同键值的记录。最好的方法是什么? 在纯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.jpqleexception
,在搜索了编写它的方法之后,我明白了此sql不能在
NamedQuery
中编写-正确吗

我还尝试了在代表tableX的对象列表中循环,对于我所做的每个对象,
em.find()
,或者创建了一个新对象,然后用
em.persist
插入它,但这似乎是一种低效的方法。(使用“查找”时,我会对每个对象进行选择,因此,如果我有一个包含2000条记录的列表,那么创建2000条选择,然后使用新的键值插入是有意义的)

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


提前感谢。

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

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