Ich habe eine Entität (Autor) und eine Controller-Aktion, die alle Autoren rendert.Weird GORM Verhalten in Grails beim Aktualisieren der Seite (F5)
def index = {
def list = Author.list()
render(view: 'index', model: ['allauthors' : list])
}
Wenn die Seite dargestellt wird, wird eine einzelne Abfrage ausgeführt, wie erwartet:
Hibernate:
select
this_.id as id0_0_,
this_.version as version0_0_,
this_.name as name0_0_
from
author this_
Wenn jedoch i drücken Aktualisieren (F5) dann eine select-Anweisung wird für jeden Autor ausgeführt (hier ich habe 3 Autoren):
Hibernate:
select
author0_.id as id0_0_,
author0_.version as version0_0_,
author0_.name as name0_0_
from
author author0_
where
author0_.id=?
Hibernate:
select
author0_.id as id0_0_,
author0_.version as version0_0_,
author0_.name as name0_0_
from
author author0_
where
author0_.id=?
Hibernate:
select
author0_.id as id0_0_,
author0_.version as version0_0_,
author0_.name as name0_0_
from
author author0_
where
author0_.id=?
Warum das passiert ???
Es könnte sein, weil Ihr Second-Level-Caching standardmäßig ausgeschaltet ist. Wenn Sie davon ausgehen, dass die Aktualisierungsfunktion häufig ausgeführt wird, können Sie die Listenabfrage zwischenspeichern, indem Sie den Cache-Parameter im Aufruf von list() übergeben. –
die seltsame Sache ist, warum die Anweisung: Author.book() die normale Single-Select-Anweisung zum ersten Mal ausführen, aber bei der Aktualisierung führt mehrere Select-Anweisungen für jeden Autor! Irgendwelche Ideen? – geo
Ich habe das Hibernate-Tag hinzugefügt, weil ich denke, dass dies besser im Ruhezustand und nicht im Grails-Level erklärt werden kann. –