如何在JPA本机查询中使用一个查询更新2个表?

时间:2015-01-09 10:04:03

标签: java spring hibernate jpa

我有2个表TABLE1和TABLE2.Table1有名字,Table2有电子邮件和电话。

要获取姓名,电子邮件和电话,我查询如下

 query = entityManagerUtil.createNativeQuery("select s.Name,c.Phone1,c.Email1 from Table1 s,Table2 c where c.id= s.NodeID and s.NodeID =21")

现在我的下一个要求是更新名称,电子邮件和电话。由于这些参数存在于不同的表中,因此我正在搜索将更新2个表的单个查询。不幸的是我使用的是sql server而且{{3} }

所以我想使用@Transactional和2个查询更新2个表,如下面的

@Transactional
public void updateDetails()
{
Query query1=   entityManagerUtil.entityManager.createNativeQuery("update Table1 set  Name='' where id in (select NodeID from Table 2) and NodeID=21");
Query query2=   entityManagerUtil.entityManager.createNativeQuery("update Table2 set  Email='' and phone1='' where NodeID in (select id from Table 2) and NodeID=21");
query1.executeUpdate();
query2.executeUpdate();

}

还有其他更好的方法来更新2个表吗?

2 个答案:

答案 0 :(得分:0)

您可以使用JDBCTemplate

http://sujitpal.blogspot.com.es/2007/03/spring-jdbctemplate-and-transactions.html

它允许使用一个连接进行多个查询,因此您可以节省一些时间而不是两次。

答案 1 :(得分:0)

为什么不使用Hibernate实体呢?只需加载与Table1和table2关联的实体,修改它们并让automatic dirty checking机制代表您更新表。这就是顺便使用ORM的一个原因。