Frage

Ich bin ein grails Neuling (und groovigem Neuling), und ich arbeite durch einige grails Tutorials. Als neuer Nutzer, Shell die Grails ist ein wirklich kleines, nützliches Tool für mich, aber ich kann nicht herausfinden, wie es meine Klassen und Objekte sehen zu machen. Hier ist, was ich versuche:

% grails create-app test
% cd test
% grails create-domain-class com.test.TestObj
% grails shell
groovy:000> new TestObj()
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_evaluate: 2: unable to resolve class TestObj

Ich habe den Eindruck, dass die grails Shell könnte alle Controller, Dienstleistungen sehen, und Domänenobjekte. Was ist mit diesem? Muss ich etwas tun, sonst hier?

Ich habe versucht, eine andere Sache:

groovy:000> foo = new com.test.TestObj();
===> com.test.TestObj : null
groovy:000> foo.save 
ERROR groovy.lang.MissingPropertyException: No such property: save for class: com.test.TestObj

Was mache ich falsch?

EDIT: Okay, ich sah die Antworten über den vollständigen Namen verwenden und auch anstelle von .save() mit .save. Aber was ist dieses?

groovy:000> new com.test.TestObj().save()
ERROR org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

Was habe ich tun, um diese Zeit nicht in Ordnung?

War es hilfreich?

Lösung

Ich zweiten Burt Rat die Konsole statt der Schale zu verwenden. In Bezug auf die Ausnahme:

groovy:000> new com.test.TestObj().save()
ERROR org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

können Sie versuchen, explizit diesen Code mit einer Transaktion ausgeführt wird:

import com.test.TestObj

TestObj.withTransaction{ status ->
    TestObj().save()
}

Andere Tipps

Sie müssen das Paket, da es möglich ist (aber keine gute Idee) zwei Domain-Klassen haben, mit dem gleichen Namen in verschiedenen Paketen.

Für die zweite Sitzung soll es sein foo.save (), nicht foo.save.

Ich ziehe die Konsole, ist es viel einfacher, mit zu arbeiten. Run ‚Grails Konsole‘ und der Swing-App starten. Es ist ein wenig anders als die reguläre Groovy Konsole, dass sie eine impliziten ‚CTX‘ Variable zur Verfügung, die der Kontext Frühling Anwendung bekommen sind. Sie können die Zugangsdienste nutzen und andere Spring Bohnen über „ctx.getBean (‚fooService‘)“

Sie werden auf import com.test.TestObj haben oder es durch new com.test.TestObj() verweisen, wie Sie gezeigt haben.

Beachten Sie, dass ‚save‘ kein propery ist, sondern ein dynamisches Verfahren, dass Grails die Domäne Klasse verziert mit zur Laufzeit.

groovy:000> foo = new com.test.TestObj();
===> com.test.TestObj : null
groovy:000> foo.save()
===> com.test.TestObj : 2
groovy:000> 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top