Ich habe ähnliche Fragen, aber keine Antworten gefunden.Grails 2.5.1 (Hibernate 3) Kriterien mehrere Joins zur gleichen Tabelle
class SomeDomain {
static hasMany= [productData:ProductData]
}
Produktdaten ist einfacher Typ/Wert-Paar
Ich versuche, alle SomeDomains zu finden, die mehrere Produkte eines bestimmten Typs haben (in einer Schleife). Zur Zeit der relevante Teil der Kriterien wie folgt aussieht:
SomeDomain.createCriteria.list {
somedata.each { type, value ->
productData {
eq("type", type)
eq("value", value)
}
}
}
Dies ist jedoch nur eine einzige Join mit dem SQL erzeugt:
from some_domain this_ inner join product_data productdata_a1_ on this_.id=productdata_a1_.some_domain_id
where (productdata_a1_.type_id=4 and productdata_a1_.value='GC')
and (productdata_a1_.type_id=5 and productdata_a1_.value='P1')
offensichtlich type_id nie = auf verknüpft, überprüft, um folgen gehen 4 und = 5 ...
Was ich wirklich gerne hätte, sind zwei innere Verknüpfungen zu product_data ... kann aber nicht herausfinden, wie man das erzwingt.
Ich versuchte Create ("Produktdaten", "Produkt - $ {index}") gab diese org.hibernate.QueryException: doppelten Pfad Verein: Produktdaten
Ich versuche, dies in einer Kriterien-Abfrage zu tun, nicht HQL. Ich kann es in HQL arbeiten lassen, aber das ist in einer Schleife (so brauche ich möglicherweise mehr Joins in der gleichen Tabelle). Zwei "ins" werden nicht funktionieren, weil ich a.type brauche, um a.value und b.type so anzupassen, dass sie b.value ... entsprechen. A.type kann nicht mit b.value ausgerichtet werden. Zum Beispiel würde [Hemd: blau, Hose: grün] mir fehlgeleitete Produktdaten geben, wenn ich nach etwas suchen würde, das Hemd hatte: grün – Trebla
... oder meine Beispieldaten verwendend [4: GC, 5: P1]. Ich brauche einige Domains, die Produkt vom Typ 4, mit Wert GC und Typ 5, Wert P1 haben. Die in Lösung würde mir einige Domains mit Typ 4, Wert P1 geben, der nicht korrekt ist. – Trebla
Ich könnte versuchen, eine Abfrage für Sie in HQL herauszufinden (da dies ist, was ich die meiste Zeit in diesen Tagen verwende), aber wie Sie sagen, Sie wollen es für die Kriterienabfrage. Persönlich kann ich den Hauptunterschied nicht sehen. Die zugrunde liegenden Abfragen werden quote nahe/ähnlich sein. Wenn Sie eine Kriterienabfrage brauchen, brauchen Sie einen Experten. Viel Glück. – Vahid