如何对Criteria查询应用悲观锁定以在hibernate中实现select for update?

时间:2017-01-13 10:42:38

标签: java mysql hibernate locking hibernate-criteria

以下是查询。

DetachedCriteria dc= DetachedCriteria.forClass(ADMPregenAWBMaster.class)
                .add(Restrictions.eq("carrCode", awbEntity.getCarrierCode()))
                .add(Restrictions.eq("tenantId", awbEntity.getTenantId()))
                .add(Restrictions.eq("logisticTypeCode", awbEntity.getDeliveryType()))
                .add(Restrictions.eq("paymentType", awbEntity.getPaymentType()))
                .setProjection(Projections.property("pregenAWBId"));


CMPregenAWBSeq pregen= (CMPregenAWBSeq)session.createCriteria(CMPregenAWBSeq.class)
                .add(Subqueries.propertyIn("compsiteKey.pregenMaster", dc))
                .setLockMode(LockMode.UPGRADE_NOWAIT)
                .setMaxResults(1)
                .uniqueResult();
pregen.setUsedFlag("Y");
session.update(pregen);

当我根据条件选择表行时,应该应用锁定,并且在表格行更新之前,任何其他线程都不应该读取查询。我不确定上面的代码是否按预期工作。

非常感谢任何帮助。

0 个答案:

没有答案