Quiero añadir una izquierda unirse en la tabla de tareas cuando se produce la siguiente condición: LEFT JOIN FETCH INMEDIATA p en (t.id = p.task.id y p.applicationName en ('XXX'))Hibernate HQL: el uso de un complejo izquierda join fetch
Aquí está mi HQL consulta:
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
consigo la siguiente excepción, probablemente debido a "sobre" la palabra clave:
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)
¿Alguna idea?
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;
}
¿Cómo puedo usar combinación izquierda ir a buscar usando mi condición p.applicationName en ('XXX')?
La estructura de clases que ha publicado (supongo que hay anotaciones adecuadas en todas esas propiedades) no vincula 'Prompt' a ninguna otra clase. Tu SQL se une a 'Prompt' y' Task' a través de 'task_id' pero no hay propiedades que coincidan arriba. ¿'Task' es una propiedad en' Prompt'? ¿O viceversa? ¿Puedes aclarar? – ChssPly76