相关疑难解决方法(0)

LockModeType Jpa之间的区别

我对JPA中LockModeTypes的工作感到困惑:

  1. LockModeType.Optimistic

    • 它在提交时递增版本.
    • 这里的问题是:如果我的实体中有版本列,并且如果我没有指定这种锁定模式,那么它的工作原理类似于什么呢?
  2. LockModeType.OPTIMISTIC_FORCE_INCREMENT

    • 即使实体未更新,它也会增加版本列.
    • 但是,如果在提交此事务之前任何其他进程更新了同一行,它的用途是什么?这笔交易无论如何都会失败.那有什么用呢LockModeType
  3. LockModeType.PESSIMISTIC_READ

    • 此锁定模式发出select for update nowait(如果未指定提示超时)..
    • 所以基本上这意味着没有其他事务可以更新此行,直到此事务被提交,那么它基本上是一个写锁,为什么它被命名为Read锁?
  4. LockModeType.PESSIMISTIC_WRITE

    • 此锁定模式还会发出select for update nowait(如果未指定提示超时).
    • 这里的问题是这个锁定模式和LockModeType.PESSIMISTIC_READ我看到两个触发相同查询的区别是什么?
  5. LockModeType.PESSIMISTIC_FORCE_INCREMENT

    • 这样做select for update nowait(如果没有指定提示超时)并且还增加版本号.
    • 我完全没有得到它的使用.
    • 为什么需要版本增量for update no wait

oracle concurrency hibernate jpa transactions

15
推荐指数
1
解决办法
1万
查看次数

为什么我对使用Oracle的JPA中的悲观锁定无法正常工作

我正在尝试为在不同JBoss节点中运行的cron作业实现某种信号量.我正在尝试使用数据库(Oracle 11g)作为锁定机制,使用一个表来同步不同节点中的cron作业.表非常简单:

CREATE TABLE SYNCHRONIZED_CRON_JOB_TASK
(
   ID            NUMBER(10)           NOT NULL,
   CRONJOBTYPE   VARCHAR2(255 Byte),
   CREATIONDATE  TIMESTAMP(6)         NOT NULL,
   RUNNING       NUMBER(1)
);

ALTER TABLE SYNCHRONIZED_CRON_JOB_TASK
   ADD CONSTRAINT PK_SYNCHRONIZED_CRON_JOB_TASK
   PRIMARY KEY (ID); 
Run Code Online (Sandbox Code Playgroud)

因此,当作业启动时,它会在表中搜索其cronjobtype的条目,并检查它是否已在运行.如果不是,则将条目设置运行标志更新为true.第一个选择是使用JPA CriteriaApi使用Hibernate和Pessimistic Lock进行的.

query.setLockMode(javax.persistence.LockModeType.PESSIMISTIC_WRITE);
Run Code Online (Sandbox Code Playgroud)

所有这些操作都是在一次交易中完成的.

当一个进程运行时,它所做的查询如下:

[Server:server-two] 10:38:00,049 INFO  [stdout] (scheduler-2) 2015-04-30 10:38:00,048 WARN  (Loader.java:264) - HHH000444: Encountered request for locking however dialect reports that database prefers locking be done in a separate select (follow-on locking); results will be locked after initial query executes
[Server:server-two] 10:38:00,049 INFO  [stdout] (scheduler-2) Hibernate: select …
Run Code Online (Sandbox Code Playgroud)

java oracle hibernate jpa pessimistic-locking

12
推荐指数
1
解决办法
5387
查看次数

具有多个实例的应用程序上的 JPA PESSIMISTIC_WRITE

我正在使用 Spring Framework 和 Spring Data,我需要在处理完成时锁定数据库表中的特定行,因此在处理完成之前没有其他人可以访问数据并更改它。同时,我正在运行同一应用程序的多个实例。

是否会PESSIMISTIC_WRITE以这样一种方式锁定数据库中的特定行,当一个应用程序实例访问该行时,同一应用程序的其他实例将无法访问该行,这些实例可能同时尝试从数据库访问同一行时间?

有一个问题讨论了锁类型PESSIMISTIC_READPESSIMISTIC_WRITE. 需要明确的是,我不是在问它们之间的区别,我是在问的范围PESSIMISTIC_WRITE以及从一个应用程序实例获取该锁将如何影响其他可能尝试读取和更新同一行的应用程序实例数据库表。

hibernate jpa spring-data spring-data-jpa

4
推荐指数
1
解决办法
628
查看次数