Hibernate 在“唯一”列中的行之间切换值
假设你有一张这样的桌子:Hibernate 在“唯一”列中的行之间切换值,hibernate,constraints,rdbms,Hibernate,Constraints,Rdbms,假设你有一张这样的桌子: id |名称 ---+--------- 1|foo 2 |巴 名称列上存在唯一性约束 如何将id为2的行设置为foo,将id为1的行设置为bar 我知道你可能只需要给两个人都指定一个临时的名字,然后把想要的名字粘在一起,但这似乎不是最简单的方法 我正在使用Hibernate,所以任何特定于Hibernate的技巧都很好。不过,这似乎是一个影响所有RDBMS的问题。在Sql Server中,您可以同时更新它们: UPDATE table SET Name = CASE
id |名称
---+---------
1|foo
2 |巴
名称
列上存在唯一性约束
如何将id为2的行设置为foo,将id为1的行设置为bar
我知道你可能只需要给两个人都指定一个临时的名字,然后把想要的名字粘在一起,但这似乎不是最简单的方法
我正在使用Hibernate,所以任何特定于Hibernate的技巧都很好。不过,这似乎是一个影响所有RDBMS的问题。在Sql Server中,您可以同时更新它们:
UPDATE table
SET Name = CASE WHEN ID = 1 THEN 'bar' ELSE 'foo' END
WHERE ID IN ( 1, 2 )
在
SQL Server
和Oracle
中,约束是延迟的,这就是您发出此查询的原因:
UPDATE mytable
SET name = CASE name WHEN 'foo' THEN 'bar' ELSE 'foo' END
WHERE name IN ('foo', 'bar')
正如在评论中所建议的那样,您似乎在MySQL
中使用它来维护一个有序列表(这是我最后一次遇到这个问题)
在这种情况下,您可能希望阅读我博客中关于如何在MySQL
中更高效地执行此操作的系列文章: