【问题标题】:Java and Hibernate, lock objects during update/write but reads always allowedJava 和 Hibernate,在更新/写入期间锁定对象,但始终允许读取
【发布时间】:2014-02-28 21:56:02
【问题描述】:

我的应用程序使用 Java、Hibernate 和 IBM DB2 数据库。我想在更新和写入数据时使用悲观锁定,因此其他线程需要等待资源可用,然后再尝试更新它。但是,我希望线程始终能够读取数据(无论它是否被锁定,即事务是否为数据打开),并且读取操作永远不会锁定数据。在 Hibernate 和 IBM DB2 中,什么隔离级别可以实现这一点?谢谢。

【问题讨论】:

  • 您的 DB2 服务器驻留在哪一类操作系统上?
  • 这是如此悲观的日志记录,我不相信任何 RDBMS 会这样做......但是在 java 级别,您可以使用ReentrantReadWriteLock 来实现这一点。
  • WarrenT:在 Redhat 上运行 fge:为什么不呢?对我来说,这听起来很常见。编辑的悲观锁定,读取的 Read Committed 隔离级别
  • 哪些进程首先锁定了数据?请注意,某些因素可能会迫使优化器将行锁定在将要更新的内容(索引/存储页面或整个表!)之外。如果这是一个人机交互过程,请准备好在午餐/假期期间将其锁定。你是如何访问这个的?如果您正在使用 Web 服务(您甚至可能不会与同一个应用程序服务器通信!),可能很难保留/重新加入锁定。语句超时的计划是什么?

标签: java hibernate transactions locking db2


【解决方案1】:

不确定 Hibernate,但在 DB2 方面,您可以使用未提交的读取隔离级别或游标稳定性隔离以及激活的“当前提交”语义(后者在 DB2 LUW 9.7 和更高版本中可用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多