gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:08:24 24 4
gpt4 key购买 nike

我正在尝试获得一个简单的更新,以便通过 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 赋值时遇到了不同的错误,如下所示。

错误=“您无法在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 中成功运行。

提前谢谢您。

最佳答案

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

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

关于java - 在 MySQL 数据库上使用 HQL 使用子查询(联接到同一个表)进行更新时出现问题。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com