【发布时间】:2010-12-13 09:18:59
【问题描述】:
当出现以下情况时,我想在 TASK 表上添加左连接: 左连接提取 PROMPT p on (t.id = p.task.id and p.applicationName in ('XXX'))
这是我的 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 来使用左连接 fetch?
【问题讨论】:
-
您发布的类结构(我假设所有这些属性都有适当的注释)没有将
Prompt链接到任何其他类。您的 SQL 通过task_id连接Prompt和Task,但上面没有匹配的属性。Task是Prompt上的属性吗?或相反亦然?你能澄清一下吗?