gpt4 book ai didi

postgresql - Hibernate Postgresql select for update with outer join 问题

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

我在尝试使用 Spring 数据和 Hibernate 作为 JPA 实现和 Postgresql 选择更新行时遇到了问题。

假设我们有实体:A,B,C。

public class A{
@Id
private Long id;

@OneToMany(fetch = FetchType.EAGER)
private Set<B> bSet;

@OneToMany(fetch = FetchType.EAGER)
private Set<C> cSet;
}

假设我们要选择 A 和所有相关的 B 和 C 实体进行更新,即锁定与 A 表相关的行。

@Query(SELECT a FROM A a 
LEFT JOIN FETCH a.bSet
LEFT JOIN FETCH a.cSet
WHERE a.id=?)
@Lock(LockModeType.PESSIMISTIC_WRITE)
public A selectAndLockA(Long Aid);

查询看起来像

SELECT a.column1, ... from tableA a LEFT JOIN tableB b ... FOR UPDATE of a,c

更新 a,c

查询将尝试锁定导致异常的两个表,例如:org.postgresql.util.PSQLException: ERROR: FOR UPDATE cannot be applied to the nullable side of an outer join

我尝试归档的是只锁定第一个表“FOR UPDATE OF a”

是否有可能以某种方式配置或告诉 Hibernate 只锁定第一个表。

最佳答案

PostreSQL 不支持。如果您执行外部 SELECT,没有什么可以阻止某人将一行插入 LEFT JOINED 表,从而修改您正在查看的结果集(例如,重复读取时列将不再为 NULL)。

有关详细说明,请参阅 here

关于postgresql - Hibernate Postgresql select for update with outer join 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46282087/

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