我们在postgres中有一个表用于我们的系统配置,我想从中删除具有某些ID的配置。问题是,在删除之前,我们有一些代码可以获取一些配置条目,并且在下一步(删除一个)中我无法删除它们,因为行已被锁定。我检查了pg_locks表,每个配置检索的事务都在postgres中保留了大约一分钟。它保持在状态"空闲的事务",而删除步骤正在等待它。
这是我们检索配置实体的方式
Query query = getEntityManager().createQuery("some query");
...
list = query.getResultList();
没有涉及任何交易,我们不会真正添加任何交易jta,ejb注释,我猜它会自动添加,并且在此查询之后会被锁定。
这就是我们尝试删除行的方式
Query query = getEntityManager().createNamedQuery(namedQuery);
query.executeUpdate();
多数民众赞成。没什么特别的,但由于某些行被锁定,查询在等待事务完成时失败。有什么想法吗?
我似乎尝试了一切。将hibernate的自动提交模式设置为true,在执行查询时将locktype设置为悲观读/写,使用具有最大事务时间的查询发送查询提示,在单独的JTA事务中执行查询,在同一事务中执行它们似乎没有任何效果,删除查询总是“挂起”