【问题标题】:How to add a "on" clause on hibernate criteria?如何在休眠条件上添加“on”子句?
【发布时间】:2026-01-17 11:20:03
【问题描述】:
DetachedCriteria criteria = DetachedCriteria.forClass(Parent.class,"parent");
criteria.createAlias("parent.child","thechild");
criteria.add(Restrictions.eq("thechild.property", "somevalue");

我阅读了许多类似上面的示例代码,这里的条件连接两个表,父表和子表,但我只是不知道如何/在哪里指定条件上的 On 条件。

喜欢下面的

select * from parent inner join child on parent.childid = child.id

但是在上面的条件中,我只是找不到在哪里添加on 条件。我应该在休眠配置文件中设置它吗?是否可以在查询中设置?

连接后如何获取两个表中所有字段的内容?创建一个包含两个表中所有字段的新类?

【问题讨论】:

    标签: java hibernate join


    【解决方案1】:

    您无需指定要加入的字段,因为它已在表映射中指定。例如:

    <bag name="Children">  
       <key column="ParentId" />  
       <one-to-many class="Parent" />  
    </bag>
    

    【讨论】:

      【解决方案2】:

      'createAlias' 'on' 子句的添加。生成 SQL 时,别名将转换为连接子句。该查询将返回一个父对象列表。不要真正遵循“从两个表中获取所有数据”的意思。您将拥有一个包含子对象的父对象列表。所有数据都以您映射的方式表示。如果您希望它以其他方式表示,那么是的,您可能需要创建一个具有所需特定数据的新对象。

      这会导致性能下降,有时您会看到有人剪切并粘贴了“标准”标准,该标准创建了每个可能的别名,然后添加了他们需要的限制。不要这样做!只要您执行“createAlias”,无论您以后是否使用别名,您的 SQL 中都会有一个联接。 (可能没什么大不了的,具体取决于您使用的数据库版本)

      【讨论】: