在MySQL数据库上使用HQL使用子查询(连接到同一个表)进行更新时出现问题。

时间:2014-06-19 15:34:26

标签: java mysql sql hibernate hql

我正在努力获得一个简单的更新,以便在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

进一步研究这个问题,我用直接替换了上面列出的'set'语句 将值赋给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中成功运行。

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

MySQL支持join中的update。我不确定hibernate是否会这样做:

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