繁体   English   中英

休眠条件-内部联接或条件

[英]Hibernate criteria - Inner Join OR Condition

我想忽略createAlias中的默认Join Restriction。 我有一个一对一的关系。

我的问题是Hibernate为联接关系生成默认限制。

波乔

注意:费用表中没有用于DiagnosticTemplate的列。

Charge.java

 @OneToOne(mappedBy = "charge")
 private DiagnosticTemplate diagnosticTemplate;

DiagnosticTemplate.java

@OneToOne
@JoinColumn(name = "charge")
@Exclude
private Charge charge;

询问

select 
  * 
from 
  charges c 
inner join diagnostic_template dt 
  on (dt.charge = c.id and dt.status=1) or (dt.status=0)

标准

Criteria criteria = getSession().createCriteria(Charge.class, "charge")
      .createAlias("charge.diagnosticTemplate", "diagnosticTemplate",
        JoinType.INNER_JOIN,
        Restrictions.or(
           Restriction.and(Restrictions.eqProperty("charge.id", 
                         "diagnosticTemplate.charge"), 
           Restrictions.eq("diagnosticTemplate.status",true)),
           Restrictions.eq("diagnosticTemplate.status",false)  ))

休眠查询

select 
  * 
from 
  charges c 
inner join diagnostic_template dt 
  on dt.charge = c.id and (dt.charge = c.id and dt.status=1) or (dt.status=0)

如何避免这种情况? 还是我的关系有什么问题?

请帮忙..!

当您通过charge.diagnosticTemplate加入charge时,这意味着Hibernate将尝试查找与此charge 相关联DiagnosticTemplate 因此,生成的条件dt.charge = c.id确实有意义。

请记住,您已经使用外键定义了关系。 因此,Hibernate无法理解dt.status=0类的软关系。

如果仍然希望实现查询,则可以考虑间接加入两个实例(不使用关联路径)。 请参阅在实体关系不是直接的情况下如何使用休眠条件连接多个表?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM