Hibernate Postgresql select for update 与外连接问题

2023-11-26

我在尝试使用 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:错误:FOR UPDATE 无法应用于外连接的可为空一侧

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

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


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

详细解释请参见here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate Postgresql select for update 与外连接问题 的相关文章

  • Spring Data JPA 中的审计和 @Embedded

    我在 JPA 审计方面遇到问题 Embedded成员 考虑以下示例场景 我在 Oracle DB 中设置了一个测试表 CREATE TABLE AUDIT TEST ID NUMBER 38 NOT NULL PRIMARY KEY CRE
  • 使用 Sequelize.js 和 PostgreSQL 查询关联模型上的 JSONB 字段

    我有我的两个模型Foo and Bar Foo有一个字段barId 因此有一个Bar与其关联的对象 我可以查询我所有的Foo对象并包括它们的关联Bar对象如此 我正在使用 TypeScript续集打字稿 https github com R
  • psycopg 错误,列不存在

    我不断收到这个 错误 psycopg2 ProgrammingError 列 someentry 不存在 该错误表明该列someentry不存在时someentry不是列 它只是要输入数据库的值 这是给出错误的代码 cur execute
  • 如何获取表中所有列的计数(*)?使用 PostgreSql

    我有一堆表 其中几个有数百列 我需要获取每列的非空值计数 并且我一直在手动执行此操作 我想找出一种方法来获取表中所有列的所有计数 我查了 stackoverflow 和 google 但找不到答案 我尝试了这个 但它只是为每列返回 1 的值
  • NotSslRecordException:不是 SSL/TLS 记录

    我正在使用 Redis Spring Data 1 8 9 RELEASE 与生菜 4 5 0 Final 作为底层 Redis 驱动程序 它使用的是 netty 版本4 1 29 我们使用启用了传输中加密和静态加密的 Redis Elas
  • 为什么在安装 gem 'pg' 时出现错误? [复制]

    这个问题在这里已经有答案了 可能的重复 无法在 ubuntu 上安装 pg gem 找不到 libpq fe h 标头 https stackoverflow com questions 6040583 unable to install
  • 如何列出表外键

    有没有办法使用 SQL 列出给定表的所有外键 我知道表名称 架构 我可以将其插入 您可以通过 information schema 表来完成此操作 例如 SELECT tc table schema tc constraint name t
  • 尝试将实例强制转换为 PersistenceCapable 失败。确保它已得到增强

    我第一次尝试 OpenJPA 2 0 1 并得到 79 WARN main openjpa Runtime The configuration property named openjpa Id was not recognized and
  • org.hibernate.QueryParameterException:无法找到命名参数[userId]

    我需要帮助 我遇到了上述异常 我哪里错了 在从类到表的映射中 我使用了以下内容 private String userId private String password 下面是我编写查询的类 public class LoginManag
  • Python postgreSQL sqlalchemy 查询 DATERANGE 列

    我有一个预订系统 并将预订日期范围保存在 日期范围 列中 booked date Column DATERANGE nullable False 我已经知道我可以通过以下方式访问实际日期booked date lower or booked
  • 出现操作错误:致命:抱歉,太多客户端已经在使用 psycopg2

    我在使用 psycopg2 时收到错误 OperationalError FATAL 抱歉 已有太多客户端 完成连接实例后 我将调用 close 方法 我不确定是什么原因造成的 这是我第一次使用 python 和 postgresql 但我
  • Postgresql:致命:角色不存在[重复]

    这个问题在这里已经有答案了 我正在设置 Postgresql 以与 Rails 应用程序一起使用 但我似乎无法连接到或正确配置数据库 启动 Rails 服务器后出现的错误是 ActiveRecord NoDatabaseError and
  • 在 ejb 3.0 中声明事务

    我怎样才能强制 EJB 在每个命令之后不刷新所有内容 我想做一个事务 我读到这是通过某种方式声明完成的 但具体如何呢 Stateless public class SomeBean PersistenceContext EntityMana
  • 帮助我了解 SEAM 和 Hibernate?

    我想将 SEAM Framework 与 Hibernate 一起使用 但不想使用 EJB 我无法使用 EJB 第一个问题是 我可以使用EntityManager吗 或者EntityManager是EJB的一部分 我如何才能在我的 SEAM
  • 使用 Hibernate/Spring 生成数据库更新脚本

    我有一个项目 我们过去依赖 hibernate 来更新数据库 hibernate hbm2ddl auto update 即使在产品上 我正在将其迁移为使用 liquibase 我唯一担心的是 并不是我的团队中的每个人都是 sql 专家 因
  • 将 postgres 连接到 django 时遇到问题

    以下文档来自Django Postgres 文档 https docs djangoproject com en 4 1 ref databases postgresql notes我添加到我的settings py 在我设置的设置中 DA
  • 如何在EAR中的ejb模块和web模块之间共享Persistence.xml?

    我们有一个 EAR 应用程序 其中包含一个 ejb 模块 该模块包含所有实体 bean 以及少量会话 bean 和 pojo 它有一个 persistence xml 现在还有其他 Web 模块 即 spring mvc 应用程序 它在 e
  • 在一个命令中选择或插入一行

    我使用的是 PostgreSQL 9 0 我有一个表 其中只有一个人工键 自动递增序列 和另一个唯一键 是的 这个表是有原因的 我想通过另一个键查找 ID 或者如果它不存在 则插入它 SELECT id FROM mytable WHERE
  • _class 字段和 Spring Data couchbase

    因此 我试图找到一种方法来删除 重命名 并更改字段值 由 spring data couchbase 生成的文档中的 class 字段 因为该文档将由一个服务存储 并且很可能被某人使用完全不同 我正在使用 spring couchbase
  • SQL错误:0,SQLState:08S01通信链路故障[重复]

    这个问题在这里已经有答案了 我收到此错误 不那么频繁 2013 05 08 16 44 35 786 WARN JDBCExceptionReporter java 100 org hibernate util JDBCExceptionR

随机推荐

  • Spring SecurityContext 在错误页面上返回 null 身份验证

    我正在尝试为 403 访问被拒绝 和 500 内部服务器错误 等错误编写自定义错误页面 它们将从 Velocity 模板呈现 并使用用户的区域设置翻译所有消息 身份验证和区域设置解析在应用程序中运行良好 我在 web xml 中将位置设置为
  • Python 链式属性访问中的无传播[重复]

    这个问题在这里已经有答案了 有没有空传播算子 空感知成员访问 运算符 在Python中 所以我可以写类似的东西 var object children grandchildren property 如 C VB NET 和 TypeScri
  • 为什么 ClassInitialize 修饰方法会使我的所有测试失败?

    我从MSDN了解到 ClassInitialize是标记一个方法 该方法将在所有测试运行之前为所有测试执行一次设置代码 当我在下面的简化装置中包含这样的方法时 所有测试都会失败 我一注释掉 他们又通过了 TestClass public c
  • 获取 SortedList 中 2 个键之间的所有键的最快方法是什么?

    给定一个人口稠密的SortedList
  • 如何在Java中确定给定日期的前一天日期?

    我假设 Java 有一些内置的方法可以做到这一点 给定一个日期 如何确定该日期之前一天的日期 例如 假设给我的是 3 1 2009 上一个日期是 2009 年 2 月 28 日 如果给我的是 3 1 2008 那么之前的日期就是 2 29
  • 在 Swift 的条件语句中将可选值分配给新变量的原因

    我正在浏览 swift 文档 在可选部分中 它讨论了使用问号 表示可能为零的变量 这可以在 if 语句中使用来检查 nil 但在文档中 他们将可选值分配给条件中的新变量 是否有一个原因 例如 它出现在the docs与此类似 Declare
  • 使用循环对数据框进行子集化

    我有一个如下所示的数据框 index ID date Amount 2 1001 2010 06 08 0 21 1001 2010 10 08 10 6 1002 2010 08 16 30 5 1002 2010 11 25 20 9
  • pg.rb 分段错误 [Mojave 升级]

    pg rb 中的分段错误 56 版本 导轨 5 2 0 红宝石 2 4 4 PG宝石 0 20 0 升级到 Mac OS mojave 后 我的本地主机服务器遇到了问题 服务器本身启动正常 但是当尝试通过网络浏览器访问它时 它崩溃了 并且出
  • 行动代表。如何获取调用该方法的实例

    我有一个操作 我想知道如何访问调用该方法的实例 Exemple this FindInstance gt this InstanceOfAClass Method this FindInstance gt this InstanceOfAC
  • RS232串口通信 C# win7 .net Framework 3.5 sp1

    你好 我是 C 串口新手 我写了一个c 程序 运行在winXP和win7上 以在机器发送数据时保留从串口接收到的数据 using System IO using System IO Ports using System Threading
  • 嵌入式Python 2.7.2 从用户定义的目录导入模块

    我将 Python 嵌入到具有定义的 API 的 C C 应用程序中 应用程序需要实例化脚本中定义的类 其结构大致如下 class userscript1 def init self do something here def method
  • 将元组列表转换为字典

    我有一个像这样的元组列表 a 1 a 2 a 3 b 1 b 2 c 1 我想通过第一项迭代此键控 因此 例如 我可以打印如下内容 a 1 2 3 b 1 2 c 1 如果不保留一个项目来跟踪第一个项目是否与我围绕元组循环相同 我该如何去做
  • Gmail 未显示正确的字体

    我正在尝试更改电子邮件的字体以打开 sans 但是 我在 Gmail 呈现正确字体时遇到问题 我设法找到解决 Outlook 问题的方法 这就是我所拥有的 body font face font family Open Sans font
  • vim 中的 Zsh 别名如 !gst?

    有没有办法在 vim 中运行我的 zsh 别名 并将输出发送到新的分割 我正在使用 oh my zsh git 别名 例如gst 而我无法做到 gst在 vim 里面 Thanks Try 设置 shell zsh l 并将别名设置为 zs
  • 将 RTSP 存储到文件位置

    我能够通过 C Winform 应用程序在 Windows 7 64 位机器上流式传输 rtsp 这是我使用的库 VLCD点网这是播放 RTSP 流的代码示例 LocationMedia media new LocationMedia rt
  • ActiveMQ 消费者挂起

    我有一个使用 SSL 传输的 activeMQ 代理 我有大约 10 个消费者正在使用该代理 我正在使用骆驼来配置我的路线 每隔一段时间 它就会挂起并且不会消耗新消息 即使我重新启动消费者 即使队列中有待处理的消息 我开始尝试通过一次一个地
  • Visual Studio 2015。文件未添加到 TFS

    我正在使用 Visual Studio 2015 update 3 以及托管在 Visualstudio com 上的 TFS 当我将 C 类文件添加到 Visual Studio 中的一个项目时 它不会自动添加到源代码管理中 对于同一解决
  • 是什么导致我的 java.net.SocketException: 连接重置? [复制]

    这个问题在这里已经有答案了 我们经常看到但间歇性的java net SocketException Connection reset我们的日志中出现错误 我们不确定在哪里Connection reset错误实际上是从哪里来的 以及如何去调试
  • NSdManager ResolveListener 错误代码 3:失败已处于活动状态

    我在 Android 应用程序中使用 NsdManager 来发现由我开发的另一台设备发布的 NSD 服务 我只在Android App上进行服务发现 这一侧不需要服务注册 网络上同时发布了同一类型服务的多个实例 我开始使用Google提供
  • Hibernate Postgresql select for update 与外连接问题

    我在尝试使用 Spring 数据和 Hibernate 作为 JPA 实现和 Postgresql 选择更新行时遇到了问题 假设我们有实体 A B C public class A Id private Long id OneToMany