如何在休眠条件中添加“on”子句?

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条件。 我应该在休眠配置文件中设置它吗? 可以在查询中设置吗?

我如何在加入后在两张表中获得所有字段的内容? 创建一个包含这两个表中所有字段的新类?


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

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

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

这导致了性能的瑕疵,有时你会看到有人剪切并粘贴一个“标准”标准,创建每个可能的别名,然后添加他们需要的限制。 不要这样做! 只要你做'createAlias',无论你是否使用别名,你的SQL都会有一个连接。 (根据您使用的数据库版本不同,这可能不是什么大问题)

链接地址: http://www.djcxy.com/p/6317.html

上一篇: How to add a "on" clause on hibernate criteria?

下一篇: Querying Hibernate Parent/Child with Subquery Criteria