gpt4 book ai didi

hibernate - 带有算术运算的 executeUpdate 不会更改列

转载 作者:行者123 更新时间:2023-12-02 04:57:15 24 4
gpt4 key购买 nike

我正在尝试在某些应用程序中进行手动订购。更新字段的 JPAQL 是这样的:

update SortableBean s set s.position = s.position + 1 where s.position >= :initialPosition and s.position < :finalPosition

executeUpdate 的返回(据我所知是更改的行数)是正确的,但是 @Versionposition 字段已更改。

我构建了一个示例项目并使用 Hibernate 和 EclipseLink 对其进行了测试,两者均使用 JPA2,而原始项目使用的是较旧的 Hibernate 版本。我有相同的异常所有相同的结果所有我能想象的测试用例。

我的示例项目点:

如果您获取代码并使用 mvn clean install -Dtest=SortableTests 运行测试,您将看到如下输出:

Sortable ID - POS - VERSION
------------------
BEFORE
Sortable 1 - 0 - 1
Sortable 2 - 1 - 1
Sortable 3 - 2 - 1
Sortable 4 - 3 - 1
Sortable 5 - 4 - 1
INITIAL=0 FINAL=3
UPDATED 3 ITEMS
AFTER
Sortable 4 - 0 - 2
Sortable 1 - 0 - 1
Sortable 2 - 1 - 1
Sortable 3 - 2 - 1
Sortable 5 - 4 - 1

换句话说,看起来它没有更新求和值,所以,我得到了重复的位置。

有什么想法吗?

编辑:

生成的SQL似乎是正确的想法:

UPDATE sortables SET version = (version + 1), pos = (pos + 1) WHERE ((pos >= 0) AND (pos < 3))

最佳答案

感谢@Chris和他的 comment ,这让我对真正的问题敞开心扉。

问题是我正在进行批量更新,但没有清除持久性上下文。

基本上,修复是 this commit .

我也有一个错误的断言,但那是我的问题中最少的。

谢谢大家!

关于hibernate - 带有算术运算的 executeUpdate 不会更改列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20501528/

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