gpt4 book ai didi

java - Hibernate 返回不匹配的行

转载 作者:行者123 更新时间:2023-11-29 19:42:28 25 4
gpt4 key购买 nike

我有一个计划执行程序服务,它在计时器上运行托管查询:

    List<Tasks> running = null;
EntityManager em = null;
String query = "SELECT t FROM Tasks t WHERE t.state IN (:stateList)";

try
{
em = getEntityManager();
TypedQuery<Tasks> q = em.createQuery(query, Tasks.class);
q.setParameter("stateList", Arrays.asList(TaskState.RUNNING, TaskState.PENDING));

running = q.getResultList();
}
finally
{
closeEntityManager(em);
}

return running;

另一个线程执行任务并将其状态设置为完成,并设置执行结束的结束时间。这是通过 ID 更新来实现的,我不会传递托管对象。

任务完成后很长一段时间,上面的查询不断返回任务,其状态仍显示为正在运行,结束时间为空。

我查看了数据库,状态设置为完成,结束时间也是如此。

没有其他线程可以修改数据库行。

这几乎就像该行是从缓存加载的,而不是从数据库加载的。这是确认的,因为当我重新启动应用程序时,该行为消失了。有什么想法吗?

最佳答案

您的交易边界是什么?我猜这是事务隔离的问题,每次运行查询时它都应该在自己的事务中。否则,查询只能看到事务开始时的数据库状态。

关于java - Hibernate 返回不匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41266890/

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