Hi,
in postgresql gibt es einen trick um queries mit langen in-Listen zu beschleunigen:
statt:
(a) select * from foo where id in ('1','2','3')
macht man
(b) select * from foo where id in (values ('1'),('2'),('3'))
Dies ist eine verkürzte schreibweise für
(c) select * from foo where id in (select x from (values ('1','2','3')) as tmp(x))
Die Frage ist jetzt, wie man das hibernate beibringt.
Es einfach in hql zu schreiben, funzt nicht. Bei (b) meint er, dass values eine Funktion wäre und erzeugt dann ungültiges sql ['in (values ('1'), 2, 2)'], (c) aktzeptiert er nicht wegen dem "(" nach dem from.
Gibt es (außer native sql) ne Möglichkeit? Die Idee wäre vielleicht eine art custom dialect. Oder das generierte sql irgendwie nochmal anzupassen. Aber ich finde keinen geeigneten hook.
Irgendwelche Ideen?
|