[英]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.