2013-02-22 61 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