【问题标题】:Full Join in Hibernate HQL在 Hibernate HQL 中完全加入
【发布时间】:2013-02-07 20:57:57
【问题描述】:

我正在尝试使用 HQL 在两个表的特定列上使用 FULL JOIN

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))

【问题讨论】:

    标签: java hibernate join hql


    【解决方案1】:

    据我所知,== 是不允许的,你应该使用=。请参阅HQL documentation

    != 是允许的,但最好使用&lt;&gt;,因为它更接近标准 SQL。

    【讨论】:

    • 预期加入的路径!路径无效:二元运算符的“b.name”右手操作数为 nul
    • 好的,我会深入研究的。能否提供A类和B类的源码?
    • 对不起,我不能他们有很大的不同。我确实分享了作为示例
    【解决方案2】:

    终于找到解决办法了

    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)));
    

    【讨论】:

    • 我很想知道您是如何达到这个结果的,以及您之前的错误是什么。
    • 我试图将 SQL 精简为 HQL,通过跟踪和错误的方法,我能够使其成功,然后理解为什么以前的事情失败了
    猜你喜欢
    • 2016-11-23
    • 2016-03-28
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2012-04-22
    • 2020-10-19
    相关资源
    最近更新 更多