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

Java 休眠条件-内部联接或条件,java,mysql,hibernate,hibernate-criteria,Java,Mysql,Hibernate,Hibernate Criteria,我想忽略createAlias中的默认连接限制。我有一段一刀切的关系 我的问题是Hibernate为连接关系生成默认限制 Pojo 注:费用表中无诊断模板栏 Charge.java @OneToOne(mappedBy = "charge") private DiagnosticTemplate diagnosticTemplate; DiagnosticTemplate.java @OneToOne @JoinColumn(name = "charge") @Exclude privat

我想忽略createAlias中的默认连接限制。我有一段一刀切的关系

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

Pojo

注:费用表中无诊断模板栏

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

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.status=1) or (dt.status=0)
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)
如何避免这种情况?或者我的关系有什么问题


请帮帮我

当您将
费用
费用.诊断模板
一起加入
费用时,意味着Hibernate将尝试查找与此
费用
链接的
诊断模板
。因此,生成的条件
dt.charge=c.id
是有意义的

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


如果您仍然希望实现查询,可以考虑间接加入两个实例(不使用关联路径)。参考

当您将
费用
费用.诊断模板
一起加入
费用时,意味着Hibernate将尝试查找与此
费用
链接的
诊断模板
。因此,生成的条件
dt.charge=c.id
是有意义的

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

如果您仍然希望实现查询,可以考虑间接加入两个实例(不使用关联路径)。参考