2017-08-03 80 views
1

我想忽略默認連接限制createAlias。我有一對一的關係。休眠條件 - 內部連接或條件

我的問題是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

當你加入與charge.diagnosticTemplate一個charge,這意味着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?