当前位置: 首页 > 知识库问答 >
问题:

在Hibernate 4中使用“选择更新”

左丘兴生
2023-03-14

我正在使用Postgres 9.3.5,最近将Hibernate从3.2更新到4.3.11。

因此,我无法运行“选择…更新”查询,而只能运行“选择…”。。对于我来说,“for update”是不够的,因为它返回

无法提取结果集。原因:错误:无法将FOR UPDATE应用于外部联接的可空端

我试图使用的标准如下:

 Criteria criteria = session.createCriteria(objectType).add(Restrictions.eq("name", objectName).ignoreCase());

我正在使用以下锁定:

在3.2中:标准。设置锁定模式(锁定模式。升级);

在4.3.11中:criteria.set锁定模式(LockMode.PESSIMISTIC_WRITE);

我有冬眠的等级制度(

<class name="BaseObject" table="BASE_OBJECTS">

当使用hibernate 3.2时,最后一个查询(取自Postgres日志)以:"更新this_2_"
结束(当this_2_是hibernate给出的映射到文件中的主表(BaseObject)hbm.xml别名时)

升级到4.3.1.1后,相同的查询返回上面提到的异常。这意味着为更新执行的最终查询(没有要执行锁定的表的名称)

在对网络进行了广泛的浏览后,我只能发现用PostgresHibernate中的“更新”不再支持了?

[https://hibernate.atlassian.net/browse/HHH-5654][2]

这似乎不太可能,因为这是一个非常重要的sql特性,而且使用率大大降低。

我是不是遗漏了什么?

02.09.15:

我会尽量澄清自己:

使用hibernate文档中给出的示例

https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html

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>

如果我想执行以下操作:从付款p中选择p,其中id=1

Hibernate将对所有表执行外部联接(在键上)。

添加锁(.setLockMode(LockMode.悲观_WRITE))将锁定四个表上的行(如“For update”),而不是仅锁定表“Payments”(“For update of p”)——这在hibernate 3.2中发生过

那么,我们所拥有的是,hibernate之前提供的东西,现在已经不起作用了,使用他们自己的映射示例

共有1个答案

端木宏盛
2023-03-14

这个问题在Hibernate5中得到了解决。在5.2.8中测试。最后。

 类似资料:
  • 问题内容: 有没有简单的方法来选择更新的行? 我试图每次读取行时都存储时间戳,以便能够删除长时间未读取的数据。 首先,我首先尝试执行查询,甚至发现有点慢但是简单的解决方案,例如 但我仍然想找到一种正常的方法来做到这一点。 我还认为先更新时间然后选择更新的行应该容易得多,但是即使如此,我也没有找到任何东西 问题答案: 声明该列,如下所示: 然后,每当更新一行时,该列就会自动更新。 更新: 我认为没有

  • 问题内容: 我在某人的iPython笔记本中看到了此代码,并且对 代码的工作方式感到非常困惑。据我了解,pd.loc []用作基于位置的 索引器,其格式为: 但是,在这种情况下,第一个索引似乎是一系列布尔值。 有人可以向我解释一下此选择的工作原理。我试图通读 文档,但找不到解释。谢谢! 问题答案: 可以使用一两个索引器。在其余文章中,我将第一个索引器表示为,将第二个索引器表示为。 如果仅提供一个索

  • 我使用的是advanced element form multi-select。当我使用multi-select插入表单的一个字段时,它可以完美地插入。 但是当我使用相同的表单更新多选择字段时,此时在选择输入标签中不会选择以前的插入值。它是在下拉列表中选择的,我也不能改变选择的字段。 我遵循这个选择2文件 笔记 ajax响应工作正常 cdn、css和javascript正确集成 我试过这些代码 J

  • 我有一个Jqgrid,Dinamicly生成如下所示的选择:

  • 问题内容: 有什么办法可以在HQL中执行以下操作: 问题答案: 我想你可以(3.6,4.3) [联编辑] …对于那些子句: “简单”情况和“搜索”情况,

  • 如何只选择父级而不选择子级? List summaryLinks=summary.findelements(by.xpath(“”));