gpt4 book ai didi

java - 在 hibernate native 查询中设置列表不起作用

转载 作者:行者123 更新时间:2023-11-29 18:07:15 24 4
gpt4 key购买 nike

我是 Hibernate 的新手,根据 native 查询的文档,我期望执行以下代码。

public boolean markStatusById(List<Integer> list, String newStatus) throws Exception {
boolean statusUpdated = false;
try {
entityManager.createQuery("UPDATE MyTableEntity SET status = :newStatus WHERE my_table_id in (?1)",
MyTableEntity .class)
.setParameter(newStatus, newStatus)
.setParameter(1, list);
statusUpdated = true;
} catch (IllegalArgumentException | TransactionRequiredException e) {
throw new Exception(CLASS_NAME,"markStatusById", e);
}
return statusUpdated;
}

但是,由于某种原因,这不起作用。

实现上述查询的目的的正确方法是什么。 One of My Reference

最佳答案

定义查询后,您需要运行它。对于更新使用:

int updateCount = entityManager.executeUpdate();

一个小提示是,在设置 statusUpdated 之前,您需要检查 updateCount 是否 > 0。

还有一个基于 JPA 建议的提示,当您想要运行 DML 查询(更新/删除)时,建议在单独的事务中运行该操作。在您的情况下,如果您使用 spring ,则将该方法的传播级别设置为 REQUIRES_NEW :

@Transactional(propagation=Propagation.REQUIRES_NEW)
public boolean markStatusById(List<Integer> list, String newStatus)

这是因为此类查询忽略了未更新的持久性上下文。

关于java - 在 hibernate native 查询中设置列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730145/

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