【问题标题】:Problems updating using a subquery (join to the same table) using HQL over a MySQL database.在 MySQL 数据库上使用 HQL 使用子查询(加入同一个表)进行更新时出现问题。
【发布时间】:2014-06-19 15:34:25
【问题描述】:

我正在尝试通过 MySQL 数据库进行设置以在 Hibernate(使用 HQL)中工作的简单更新。那里 关于与我遇到的错误类似的错误,还有其他线程,但没有任何内容可以说明相同的问题。

我想要做的更新是用同一张表中另一行的信息更新一行。这里没什么特别的,我有一个使用 Toad 在 MySQL 中工作的类似版本。

据我了解,HQL 不喜欢内部连接进行更新,而是使用子查询 - 我这样做对吗?

不管怎样,下面是我使用的更新的第一个版本。这引发了错误消息 “无效路径:'tbB.column1'”并查看以下内容,我不确定问题出在哪里。

UPDATE tableA tbA
   SET tbA.column1 = tbB.column1
     WHERE tbA.operationalId =
          (SELECT tbB.operationalId FROM tableA AS tbB
            WHERE tbA.operationalId = tbB.operationalId)
   AND tbA.column2 = 1

进一步研究这个问题,我将上面列出的“设置”语句替换为直 将值分配给 tbA.column1 并遇到下面列出的不同错误。

error = "您不能在 FROM 子句中指定目标表 'tableA' 进行更新"

UPDATE tableA tbA
   SET tbA.column1 = 1
     WHERE tbA.operationalId =
          (SELECT tbB.operationalId FROM tableA AS tbB
            WHERE tbA.operationalId = tbB.operationalId)
   AND tbA.column2 = 1

如果有人能指出我正确的方向,我将不胜感激 - 我不确定是否需要进一步调整 sql 才能在 Hibernate 中成功运行。

提前谢谢你。

【问题讨论】:

    标签: java mysql sql hibernate hql


    【解决方案1】:

    MySQL 在update 中支持join。我不确定hibernate是否可以:

    UPDATE tableA tbA join
           tableA tblB
           on tbA.operationalId = tbB.operationalId
       SET tbA.column1 = tbB.column1
       WHERE tbA.column2 = 1;
    

    【讨论】:

    • 是的,我可以让它在 MySQL 中工作,只是不能在 Hibernate 中工作,这就是我的挑战。
    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多