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