简体   繁体   English

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

[英]Hibernate criteria - Inner Join OR Condition

I want to ignore default Join Restriction in createAlias . 我想忽略createAlias中的默认Join Restriction。 I have a OnetoOne relationship. 我有一个一对一的关系。

My Problem is Hibernate generates default restriction for the join relationship. 我的问题是Hibernate为联接关系生成默认限制。

Pojo 波乔

Note : No column for diagnosticTemplate in charge table. 注意:费用表中没有用于DiagnosticTemplate的列。

Charge.java Charge.java

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

DiagnosticTemplate.java DiagnosticTemplate.java

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

Query 询问

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

Criteria 标准

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)  ))

Hibernate Query 休眠查询

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)

How to avoid this condition? 如何避免这种情况? or anything wrong with my relationship? 还是我的关系有什么问题?

Please help..! 请帮忙..!

When you join a charge with charge.diagnosticTemplate , it means that Hibernate will try to lookup a DiagnosticTemplate that is linked with this charge . 当您通过charge.diagnosticTemplate加入charge时,这意味着Hibernate将尝试查找与此charge 相关联DiagnosticTemplate Thus, the generated condition dt.charge = c.id does make sense. 因此,生成的条件dt.charge = c.id确实有意义。

Remember that you have define the relationship using foreign key. 请记住,您已经使用外键定义了关系。 So, soft relation like dt.status=0 cannot be understood by Hibernate. 因此,Hibernate无法理解dt.status=0类的软关系。

If you still wish to achieve you query, you can consider joining the two instance indirectly (not using association path). 如果仍然希望实现查询,则可以考虑间接加入两个实例(不使用关联路径)。 Refer to How to join Multiple table using hibernate criteria where entity relationship is not direct? 请参阅在实体关系不是直接的情况下如何使用休眠条件连接多个表? .

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

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