java – 使用Hibernate 4和Postgres的“SELECT FOR UPDATE OF”
我正在使用Postgres 9.3.5并且最近将hibernate从3.2更新到4.3.11.
结果我无法运行“SELECT … FOR UPDATE OF”查询,
我试图使用的标准如下: Criteria criteria = session.createCriteria(objectType).add(Restrictions.eq("name",objectName).ignoreCase()); 我正在使用以下锁定: 3.2中:criteria.setLockMode(LockMode.UPGRADE); 在4.3.11中:criteria.setLockMode(LockMode.PESSIMISTIC_WRITE); 我有一个hibernate(& DB)对象的层次结构,这导致hibernate在构造上述查询时执行多个连接. <class name="BaSEObject" table="BASE_OBJECTS"> 在使用hibernate 3.2时,最终查询(取自Postgres日志)以:“更新this_2_”结束 升级到4.3.1.1后,同一查询返回上述异常. 经过广泛的网络浏览后,我发现只有不再支持hibernate与Postgres的“for update of”了吗? [https://hibernate.atlassian.net/browse/HHH-5654][2] 它似乎不太可能,因为它是一个非常重要的sql功能和使用率大幅下降. 我在这里错过了什么吗? 15年9月2日: 我会尽力澄清自己: 使用hibernate文档中给出的示例
class name="Payment" table="PAYMENT"> <id name="id" type="long" column="PAYMENT_ID"> <generator class="native"/> </id> <property name="amount" column="AMOUNT"/> ... <joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT"> <key column="PAYMENT_ID"/> <property name="creditCardType" column="CCTYPE"/> ... </joined-subclass> <joined-subclass name="CashPayment" table="CASH_PAYMENT"> <key column="PAYMENT_ID"/> ... </joined-subclass> <joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT"> <key column="PAYMENT_ID"/> ... </joined-subclass> 如果我想执行以下操作: Hibernate将在所有表上执行外连接(在键上). 添加锁(.setLockMode(LockMode.PESSIMISTIC_WRITE))将锁定四个表上的行(如’For update’), 那么我们所拥有的是,早期由hibernate提供的东西,不再使用它们自己的映射示例了吗? 提前致谢 解决方法
问题已在Hibernate 5中修复. 测试在5.2.8.Final.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |