我想忽略 createAlias 中的默认加入限制。我有一个OnetoOne关系。
我的问题是Hibernate为连接关系生成默认限制。
POJO的
注意:在控制表中没有用于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) ))
Hibernate查询
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)
如何避免这种情况?或者我的关系有什么问题?
请帮忙..!
答案 0 :(得分:0)
当您使用charge
加入charge.diagnosticTemplate
时,这意味着Hibernate会尝试使用此DiagnosticTemplate
查找链接的charge
。因此,生成的条件dt.charge = c.id
确实有意义。
请记住,您已使用外键定义关系。因此,Hibernate无法理解像dt.status=0
这样的软关系。
如果您仍希望实现查询,可以考虑间接加入两个实例(不使用关联路径)。请参阅How to join Multiple table using hibernate criteria where entity relationship is not direct?。