Skip to content

Bootstrap

TrickShotMLG02 edited this page Jul 5, 2021 · 1 revision

Bootstrapdaten

Um nach dem Start einer Grails App, bereits Daten zu initialisieren, können in der Datei bootstrap.groovy Objekte erzeugt werden.

Transaction

Damit ein erzeugtes Objekt in der zugehörigen relationalen Datenbank gespeichert werden kann, führt das Framework Hibernate eine sogenannte Transaction aus. Um dies auch während der Initialisierung in der Bootstrap-Datei zu erreichen, muss die Erzeugung der Objekte als Transaction gekennzeichnet werden. Dies kann durch die Notation mit @Transactional oder der Punkt-Notation <classname>.withTransaction erreicht werden. Ausgelöst wird die Transaction durch den Parameter flush im Befehl save(flush:true).

Desweiteren muss die Datei Application.yml durch einen Eintrag ergänzt werden, damit die Transaction innerhalb der Bootstrap Datei erlaubt ist. Dabei darf das Projekt nicht getartet sein.

Application.yml

Ergänzen Sie in der Datei hinter dem Eintrag hibernate folgende Zeile:

hibernate:
    allow_update_outside_transaction: true

Beispiel

package deputat
import grails.transaction.*
class BootStrap {

    def init = { servletContext ->

        Raum.withTransaction{

            //Lehrerzimmer mit Lehrern    
            //addToLehrer fügt Lehrerobjekte zur Liste  [lehrer:Lehrer] hinzu
            def r1 = new Raum(nummer:227, maxAnzahlPersonen:2)
            r1.addToLehrer(new Lehrer (kurzname:'ko', nachname:'Knorre'))
            r1.addToLehrer(new Lehrer (kurzname:'lb', nachname:'Laber'))
            r1.save(flush:true)
          
        }

Clone this wiki locally