【问题标题】: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 关键字。

    但是,如果您在UserTemp 之间存在实体关系,您可以尝试这样的操作:

    UPDATE User u
    SET u.name = u.temp.name
    

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      相关资源
      最近更新 更多