检索后在postgres中锁定实体

时间:2017-07-11 13:58:13

标签: java postgresql hibernate jpa

我们在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事务中执行查询,在同一事务中执行它们似乎没有任何效果,删除查询总是“挂起”

0 个答案:

没有答案