0

如何在休眠条件中的 LEFT_JOIN 中提供 OR 子句。

Criteria mainCrit=hibernateSession.createCriteria("Main.class");    
Criteria aPropertyCrit=mainCrit.createCrieria("child",CriteriaSpecification.LEFT_JOIN);

它生成sql为

select this_.Id,this_childId....
from main as this_
left join child as child1_ on child1_ .id=this_.childId
where.....

我需要将sql生成为

select this_.Id,this_childId....
from main as this_
left join child as child1_ on child1_.id=this_.childId or child_.ParentId=this_.childId
where.....

如何在上述条件中的 LEFT_JOIN 中提供 OR 子句。

4

1 回答 1

0

即使使用 Criteria API,也可以扩展 JOIN ... ON 部分。但只是为了更具限制性,即添加AND部分。

看一下createCriteria方法的重载,主要是最后一个参数withClause

Criteria createCriteria(String associationPath,
                        String alias,
                        JoinType joinType,
                        Criterion withClause)
                        throws HibernateException

创建一个新的 Criteria,“植根于”关联实体,分配给定的别名并使用指定的连接类型。

参数:

  • AssociationPath - 一个点分隔的属性路径
  • alias - 分配给加入关联的别名(供以后参考)。
  • joinType - 要使用的连接类型。
  • withClause - 要添加到连接条件的条件(ON 子句)

事实上,任何其他方法(例如添加 OR),都破坏了映射原则,引入了在末尾进行交叉连接的能力。请参阅休眠条件:在没有映射关联的情况下加入表

于 2013-09-26T03:18:15.323 回答