【问题标题】:Hibernate HQL Query field of propertyHibernate HQL 查询属性字段
【发布时间】:2016-04-21 07:24:48
【问题描述】:

假设我在 Java 中有三个实体:实体 A、实体 B 和实体 C。实体 A 将实体 B 作为字段,而实体 B 将实体 C 作为字段。现在在我的 DAO 类中,我得到了一个实体 C 的对象。使用 Hibernate HQL 查询,是否可以更新数据库中具有实体 B 的实体 A 的所有实例,而实体 B 的实体 C 字段又等于实体 C 的对象。具体而言,我设想如下所示。下面的查询可以吗?请注意,我正在使用 ids 来检查是否相等

C c = new C();
c.setId(someId);

Query query = session.createQuery("update A set someField = true where b.c=:c");
        query.setEntity("c", c);
        query.executeUpdate();

【问题讨论】:

  • 查询中可以使用join吗?
  • 您的具体解决方案是什么样的?

标签: java hibernate hql


【解决方案1】:

Hibernate 批量 DML 语句不支持联接。您可以为此目的使用子查询。例如:

update A set someField = true
where id in (select id from A where b.c = :c)

【讨论】:

  • 你确定这行得通吗?这个陈述和我上面的陈述有什么区别?
  • @KevinWu 您是否在发送之前尝试过您的代码? :) 你也没有告诉我们你最初尝试的结果。试一试,然后将结果返回给我们,否则无法猜测您的应用程序设置中会发生什么。关于区别,通过导航路径的隐式连接被转换为 from 子句中的连接。
  • 真的,我会试一试。顺便提一句。我们目前还不能完全测试我们的代码,但那个时候很快就会到来:)
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2011-05-18
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多