Java 如何在JPA原生查询中使用一个查询更新2个表?

Java 如何在JPA原生查询中使用一个查询更新2个表?,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有两张表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") 现在,我的下一个要求是更新姓名、电子邮件和电话。由于这些参数存在于不同的表中,

我有两张表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,并且

所以我想使用@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个表吗?

您可以使用JDBCTemplate


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

为什么不使用Hibernate实体来执行此操作呢。只需加载与表1和表2关联的实体,修改它们,并让机制代表您更新表。顺便说一句,这就是使用ORM的一个原因。

不能用SQL语句在一个查询中更新两个表,所以在Hibernate中不能这样做。要么更改您的模式,要么更改您的事务性方法。@mavroprovato您的更改指的是什么模式?我使用的方法(@Transactional)有效吗?我的意思是将两列放在同一个表中。至于事务性注释,它看起来还可以,但如果没有看到更多的代码,我不能肯定地告诉您:它只在SpringBean中工作,您必须进行一些配置,等等。您必须阅读并理解这一点:谢谢您的回答,我读了你的博客,但我不知道如何为它编码。如果你能给出一个例子就好了。首先,请阅读整个Hibernate文档。第二,在了解基本知识后尝试一个例子。如果您仍然有问题,请针对实际代码尝试提出另一个SO问题。我没有表的实体,因此我使用本机查询。原因是桌面应用程序是内置于.net的windows应用程序,因此他们使用sql server。我使用他们现有的数据库为他们提供了一个ios应用程序,因此我无法使用模型类或实体。希望您理解。然后,您需要添加实体。这一点都不复杂。希望您理解为什么我没有实体,为什么我使用本机查询