2013-02-22 51 views
2

我想使用FULL使用HQL全部加入Hibernate的HQL

List<B> expiredMacs = getHibernateTemplate() 
       .find("from B b join A a where b.type != 'USER' and (b.id != a.id or (b.name == a.name and b.value != a.value))"); 

兩個表的特定列的加入,但它拋出錯誤意外的標記:=近線1,列325

任何想法怎麼了?

在SQL

SELECT B.* FROM B b, A a WHERE b.type != 'USER' AND (b.id != a.id or (b.name == a.name and b.value != a.value)) 

回答

1

終於讓我找到解決方案

List<B> expiredMacs = getHibernateTemplate() 
      .find(SELECT b from B b, A a where b.type <> 'USER' and (b.id <> a.id or (b.name == a.name and b.value <> a.value))); 
+0

我很想知道你是如何達到這個結果的,你之前犯了什麼錯誤。 – gd1 2013-02-22 09:50:06

+0

我試圖將SQL細化到HQL,並通過跟蹤和錯誤的方法,我能夠使它成功,然後明白爲什麼以前的事情失敗 – Reddy 2013-02-22 10:18:08

1

據我所知,==是不允許的,你應該使用=。請參閱HQL documentation

!=是允許的,但最好使用<>,因爲它更接近標準SQL。

+0

路徑預期的加入! 路徑無效:'b.name' 二元運算符的右側操作數爲nul – Reddy 2013-02-22 09:39:07

+0

好的,我會深入研究這一點。你能否給我們提供A和B類的源代碼? – gd1 2013-02-22 09:41:09

+0

抱歉,我不能他們有很大的不同。我的確以此爲例 – Reddy 2013-02-22 10:00:27