Put*_*tin 5 postgresql hibernate jpa spring-data
我遇到了尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)
假设我们要选择具有所有相关B和C实体的A进行更新,即与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);
Run Code Online (Sandbox Code Playgroud)
查询看起来像
SELECT a.column1, ... from tableA a LEFT JOIN tableB b ... FOR UPDATE of a,c
Run Code Online (Sandbox Code Playgroud)
用于更新a,c
该查询将尝试锁定两个导致异常的表,如: org.postgresql.util.PSQLException:错误:FOR UPDATE无法应用于外部联接的可为空的一侧
我尝试归档的是仅锁定第一个表“ FOR UPDATE OF a”
是否可以以某种方式配置或告诉Hibernate仅锁定第一个表。