Tag: 悲观锁定

spring悲观锁定

我有java下的spring项目,使用hibernate查询,我喜欢使用悲观锁定。 如何在Spring + Hibernate中进行悲观锁定? 编辑: @Loggable(value = LogLevel.TRACE) @Transactional @Override public void updateBalance(String id, BigDecimal amount) { Session session = sessionFactory.getCurrentSession(); sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.flush(); Account acc = (Account) session.get(Account.class, id, LockMode.UPGRADE); acc.setName(“New Account”); acc.setBalance(acc.getBalance().subtract(amount)); save(acc); try{ tx.commit(); }catch (TransactionException e){ tx.rollback(); } session.close(); } 问题: 我想在方法中使用悲观锁定,并且我从不同的方法中调用此方法。 当我从第一种方法调用它时,悲观的工作正常,但当我从第二种方法调用它时,它给出了(事务无法提交) 例外: Could not commit Hibernate […]

为什么我对使用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); 因此,当作业开始时,它会在表中搜索其cronjobtype的条目,并检查它是否已在运行。 如果不是,则将条目设置运行标志更新为true。 第一个选择是使用JPA CriteriaApi使用Hibernate和Pessimistic Lock进行的。 query.setLockMode(javax.persistence.LockModeType.PESSIMISTIC_WRITE); 所有这些操作都是在一次交易中完成的。 当一个进程运行时,它所做的查询如下: [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 […]