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
中更高效地执行此操作的系列文章:


+1。Hibernate支持HQL中的CASE语句:我不禁想知道为什么您需要这样的东西。您是否正在尝试维护某种有序列表?如果是这样,最好添加一个单独的“element\u index”列。你能解释一下你想做什么吗?你在使用哪种DBMS吗?+1,我认为这不管用,但我试过了(创建了一个表、约束等),它确实管用