【问题标题】:Hibernate criteria - Inner Join OR Condition休眠条件 - 内部连接或条件
【发布时间】:2018-01-10 18:53:34
【问题描述】:

我想忽略 createAlias 中的默认加入限制。我有一对一的关系。

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

波乔

注意:charge table 中没有 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)

如何避免这种情况?还是我的关系有什么问题?

请帮忙..!

【问题讨论】:

    标签: java mysql hibernate hibernate-criteria


    【解决方案1】:

    当您将chargecharge.diagnosticTemplate 连接在一起时,这意味着Hibernate 将尝试查找与此charge链接DiagnosticTemplate。因此,生成的条件dt.charge = c.id 确实有意义。

    请记住,您已经使用外键定义了关系。所以,像dt.status=0 这样的软关系不能被Hibernate 理解。

    如果你仍然希望实现你的查询,你可以考虑间接加入两个实例(不使用关联路径)。请参阅How to join Multiple table using hibernate criteria where entity relationship is not direct?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 2016-05-02
      • 2014-09-24
      • 2012-12-22
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多