Ich habe eine einfache bidirektionale Eins-zu-viele-Zuordnung, wie folgt, mit einer standardmäßigen Sortierreihenfolge auf der besitzenden Seite. Die Sortierreihenfolge scheint jedoch nicht angewendet zu werden. Ich benutze Grails v2.0.1 (Ich habe dieses Beispiel jetzt mit v1.3.7 repliziert).Grails: Sortierreihenfolge auf Eins-zu-Viele-Beziehung funktioniert nicht
package playground
class User {
String name
static hasMany = [ posts : Post ]
static mapping = {
posts sort:'position'
}
}
und
package playground
class Post {
int position = 1
String message
static belongsTo = [ user : User ]
}
hierfür ist die Integration Testcode ich es ausüben bin mit ...
def User user = new User(name:'bob')
user.addToPosts(new Post(position:2, message:'two'))
user.addToPosts(new Post(position:3, message:'three'))
user.addToPosts(new Post(position:1, message:'one'))
assertTrue user.validate()
assertFalse user.hasErrors()
assertNotNull user.save()
for (post in user.posts) {
log.debug "Post message> ${post.message}"
}
Bitte nehmen Sie mich aus meinem Elend, dann ist es vermutlich offensichtlich etwas aber ich kann es nicht sehen! Vielen Dank.
Es ist möglich, dass die Art nur dann angewandt wird, wenn es aus der Datenbank gezogen wird. Vielleicht versuchen Sie user.refresh() vor Ihrer for-Schleife, um zu sehen, ob das wahr ist? Es ist keine Lösung, aber es könnte die unterschiedliche Reihenfolge erklären. – Igor
Das oder einen neuen Verweis auf es mit einem User.findByName ('bob'), um eine Hin-und Rückfahrt zu erzwingen, sollte wahrscheinlich nicht müssen, aber könnte hinzufügen, ein Flush: True zum Speichern sowie –
Interessant. Flush: True hat nicht funktioniert, aber Benutzer.refresh() hat es getan. Das Seltsame ist, dass, wenn Sie den Benutzer wieder aus der Datenbank herausrufen (def User foundUser = User.get (user.id);)) dann iterieren Sie über die Posts, die es immer noch nicht in sortierter Reihenfolge macht - möglicherweise weil es erhalten wurde aus dem Cache (obwohl das Hinzufügen von flush: true auch dort nicht funktioniert). Dies ist nicht die erste Kuriosität, die ich bei Integrationstests gesehen habe ... beunruhigend. – ndtreviv