【问题标题】:How to update with inner join in HQL如何在 HQL 中使用内部联接进行更新
【发布时间】:2018-07-14 18:28:18
【问题描述】:
如何在 HQL 中使用内部连接进行更新?
我在 SQL 中的查询是这样的
更新你
设置 u.name = t.name
来自用户 u
内连接 Temp t on t.id = u.id
我尝试像 HQL 一样
@Query("
更新用户 u
设置 u.name = ..?..
u.id 在哪里(从 Temp 中选择 id)
")
如何在 Temp 中获取名称以在此查询中设置?
谢谢。
【问题讨论】:
标签:
java
sql
hibernate
hql
【解决方案1】:
HQL 和 Hive QL 一样吗?不,休眠 QL。
Hibernate 提供了一个 createSQLQuery 方法让你直接调用你的原生 SQL 语句。基于 ORACLE SQL 的原生 SQL 查询方法:
update u
set u.name = (select t.name
from t
where t.id = u.id)
where exists (select 'X'
from t
where t.id = u.id)
然后根据那些关于参数和绑定变量的对象指南应用 Hibernate 的东西。不相信 INNER JOIN 是要走的路,但 Hibernate 可能与某些方法不同。
【解决方案2】:
JPQL syntax 不支持 JOIN 关键字。
但是,如果您在User 和Temp 之间存在实体关系,您可以尝试这样的操作:
UPDATE User u
SET u.name = u.temp.name