我想复制具有不同键值的记录。最好的方法是什么? 在普通的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然后插入新的键值就有意义了。)
所以我的问题是实现复制所有记录的最佳方法是什么? 如果我得到一个例外,或者出了什么问题我想回滚,以便我不会在我的数据库表中只有部分记录。
提前致谢。
答案 0 :(得分:0)
您可以通过本机查询在JPA中使用任何SQL。 SQL最适合这种类型的插入。
如果您需要在插入数据之前对数据执行任何操作,那么您将查询对象,然后插入它们。启用批量写入以提高效率。
http://java-persistence-performance.blogspot.com/2013/05/batch-writing-and-dynamic-vs.html