GORM createCriteria und die Liste nicht wieder die gleichen Ergebnisse : was kann ich tun?
Ich bin mit Flink und Shiro für meine security-frameworks und ich bin gekommen, nur über einen GORM bug. In der Tat :
User.createCriteria().list {
maxResults 10
}
gibt 10 Benutzer in der Erwägung, dass User.list(max: 10)
gibt 9 Benutzer !
Nach weiteren Untersuchungen fand ich heraus, dass createCriteria
gibt zweimal die gleiche Benutzer (admin) weil admin hat 2 Rollen!!! (Ich bin kein Scherz).
Scheint es, dass jeder user mit mehr als 1 Rolle zurückgegeben werden zweimal in der createCriteria
anrufen und User.list
zurück max-1
Instanzen (ich.e 9 Benutzer statt 10 user)
Was workaround kann ich verwenden, um bis zu 10 einzigartige Benutzer zurückgegeben ?
Dies ist sehr ärgerlich, denn ich habe keine Möglichkeit, den Seitenumbruch korrekt.
Meine domain Klassen sind:
class UserBase {
String username
static belongsTo = [Role, Group]
static hasMany = [roles: Role, groups: Group]
static fetchMode = [roles: 'eager', groups: 'eager']
static mapping = {
roles cache: true,
cascade: 'none',
cache usage: 'read-write', include: 'all'
}
}
class User extends UserBase {
static mapping = {cache: 'read-write'}
}
class Role {
static hasMany = [users: UserBase, groups: Group]
static belongsTo = [Group]
static mapping = { cache usage: 'read-write', include: 'all'
users cache: true
groups cache: true
}
}
- Was ist Ihre Umsetzung schließlich ? Weil ich habe das gleiche problem. Vielen Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weniger prägnant und klar, aber mit einer HQL-Abfrage scheint ein Weg, um dieses problem zu lösen. Wie beschrieben in der Grails-Dokumentation (executeQuery Abschnitt), die den Umbruch Parameter können als zusätzlichen Parameter zu executeQuery.
diese Weise können Sie trotzdem die Kriterien und übergeben-Liste/Paginierung Parameter
EDIT: einen Weg Gefunden, um beides zu bekommen! Total geht es jetzt verwenden
http://www.intelligrape.com/blog/tag/pagedresultlist/
Haben Sie alle Informationen, die Sie brauchen, in einem schönen PagedResultList format!
/EDIT
Leider weiß ich nicht, wie man eine Kombination von Ergebnis-UND max/offset Paginierung Teilmenge in der gleichen nennen. (Wer kann aufklären auf?)
Ich kann jedoch sprechen, so habe ich mit Erfolg verwendet, um zu bekommen, Paginierung, arbeiten im Allgemeinen in grails.
Dies ist ein Beispiel für etwas, was ich verwende um die Paginierung läuft. Als KoK gesagt, ich bin noch an einem Verlust für einen einzelnen atomaren Aussage, dass sowohl die Ergebnisse. Ich merke, dass meine Antwort mehr oder weniger das gleiche wie KoK jetzt, sorry, aber ich denke, es ist erwähnenswert, dass rowCount() in Projektionen ist etwas mehr klar zu Lesen, und ich habe keinen Kommentar Privilegien noch :/
Schließlich: das ist der Heilige Gral (kein Wortspiel beabsichtigt) von grails hibernate Kriterien Verwendung von Referenzen; Lesezeichen 😉
http://www.grails.org/doc/1.3.x/ref/Domain%20Classes/createCriteria.html
Beiden Lösungen, die hier angeboten werden von Ruben und Aaron immer noch nicht "voll" arbeiten für die Paginierung
weil das zurückgegebene Objekt (von executeQuery() und listDistinct) ist eine ArrayList
(mit bis zu max-Objekte in es), und nicht PagedResultList mit der totalCount-Eigenschaft
besiedelt als würde ich erwarten, dass für "voll" unterstützen die Paginierung.
Lassen Sie uns sagen, das Beispiel ist ein wenig komplizierter, da :
ein. übernehmen die Rolle hat ein zusätzliches Attribut rolename UND
b. wir wollen nur zurück eindeutiger Benutzer-Objekte mit Rolle.Funktionsname mit einem string "a"
(halten Sie im Verstand, die ein Benutzer kann mehrere Rollen haben, die mit Funktionsname mit einem string "a")
Dieses zu erhalten getan mit 2 Abfragen hätte ich etwas wie das hier tun :
Scheint dies höchst ineffizient.
Frage : gibt es eine Möglichkeit zu erreichen, beide oben mit einem GORM/HQL-Anweisung ?
Können Sie
Vielen Dank für Ihre Frage und Kok für Sie zu beantworten. Ich habe nicht eine chance, um zu umschreiben, dass es zu HQL. Hier ist meine Lösung (workaround): http://ondrej-kvasnovsky.blogspot.com/2012/01/grails-listdistinct-and-pagination.html
Mir bitte sagen, wenn das nützlich ist (zumindest für jemanden).