2016-11-16 62 views
0

我正在轉換到hibernate 5.2.4並使用CriteriaQuery。在測試文件上的空連接時遇到輕微問題。這是我在之前的工作。Hibernate CriteriaQuery檢查空聯接

@Entity 
public class MyClass { 
.... 
@ManyToOne(..) 
public MyDetail getMyDetail() { 
    return myDetail; 
} 
} 

Criteria criteria = session.createCriteria(MyClass.class); 
criteria.createAlias("myDetail", "md"); 
criteria.add(Restrictions.isNotNull("myDetail")); 

我一直在檢查這樣的,有時它不工作:

andPredicate = builder.and(andPredicate, builder.isNotNull(
        root.get(MyClass_.myDetail))); 

有沒有做到這一點正確的方法是什麼?我試圖創建一個空的加入和測試,但這也是行不通的:

Join<MyClass, MyDetail> myJoin = root.join(MyClass_.myDetail); 

andPredicate = builder.and(andPredicate, myJoin.isNotNull()); 

謝謝。

回答

0

工作了,我需要一個匹配

criteria.createAlias("myDetail", "md"); 

即:

root.join(MyClass_.myDetail); 

由於查詢並沒有對關係,所以我沒有做任何連接選擇。

似乎還有,我不必檢查連接是否爲空。只要加入就足夠了。