gpt4 book ai didi

hibernate HQL : how to use a complex left join fetch

转载 作者:行者123 更新时间:2023-12-04 03:07:43 28 4
gpt4 key购买 nike

当发生以下情况时,我想在任务表上添加一个左联接:
左联接脚
提示p on(t.id = p.task.id 和('XXX')中的p.applicationName)

这是我的hql查询:

select
distinct t
from
TASK t
LEFT JOIN FETCH
SERVER ser
on t.id=ser.task_id
LEFT JOIN FETCH
APPLICATION app
on ser.id=app.server_id
LEFT JOIN FETCH
PROMPT p on (t.id = p.task.id and p.applicationName in ('XXX'))
where
t.id=ser.task.id
and ser.id=app.server
and app.name in ('XXX')
order by t.id

我收到以下异常,可能是由于“on”关键字造成的:
java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V

at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:771)

有任何想法吗?
class Task {
private String taskId;
private Set<ServerDetails> servers;
}

class ServerDetails {
private String id;
private Set<ApplicationDetails> applications;
}

class ApplicationDetails {
private String id;
}

Class Prompt {
private String applicationName;
}

如何使用('XXX')中的条件p.applicationName使用左联接 来获取

最佳答案

这里有几个问题:

  • 您所发布的HQL并不是真正的HQL :-)它直接是SQL。对于HQL,您需要使用映射的关联来联接表。参见下面的改进版本。
  • 据我所知,ON子句不支持括号中的多个连接条件。
  • NoSuchMethodError不是Hibernate会抛出的东西:-)您可能在类路径中的某个位置有较旧版本的antlr.jar,并且它代替了Hibernate期望的版本。找到并删除它。

  • 在未看到您的映射的情况下,以下内容可能不准确,但我将尝试编写更合适的HQL:
    select distinct t        
    from TASK t
    left join fetch t.server ser
    left join fetch ser.application app
    left join t.prompt p with p.applicationName in ('XXX')
    order by t.id

    请注意,由于无法将 promptjoin fetch条件一起使用,因此未提取 with。如果需要关联,则可以将其替换为 inner join fetchwhere

    如果在解决类路径问题后仍然遇到问题,请在需要有关实际HQL的帮助时随时发布映射。

    关于 hibernate HQL : how to use a complex left join fetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1679908/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com