Question

Je suis un débutant de Grails (et un débutant groovy), et je travaille à travers quelques tutoriels Grails. En tant que nouvel utilisateur, la coquille de Grails est un peu vraiment utile outil pour moi, mais je ne peux pas comprendre comment le faire voir mes classes et objets. Voici ce que je suis en train:

% 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

J'avais l'impression que la coquille de Grails pouvait voir tous les contrôleurs, les services et les objets de domaine. Quoi de neuf avec cela? Ai-je besoin de faire quelque chose d'autre ici?

J'ai essayé une autre chose:

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

Qu'est-ce que je fais mal?

EDIT: D'accord, j'ai vu les réponses sur l'utilisation du nom complet et aussi à l'aide .save() au lieu de .save. Mais qu'en est-celui-ci?

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

Qu'est-ce que je fais mal cette fois-ci?

Était-ce utile?

La solution

Je deuxième conseil de Burt d'utiliser la console au lieu de la coquille. En ce qui concerne l'exception:

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

Pouvez-vous essayez d'exécuter explicitement ce code avec une transaction:

import com.test.TestObj

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

Autres conseils

Vous avez besoin du paquet car il est possible (mais pas une bonne idée) d'avoir deux classes de domaine avec le même nom dans différents paquets.

Pour la 2e session, il devrait être foo.save (), non foo.save.

Je préfère la console, il est beaucoup plus facile de travailler avec. Run « console Grails » et l'application Swing va commencer. Il est un peu différent de la console Groovy régulière en ce qu'elle a obtenu une variable « CTX » implicites disponibles qui est le contexte d'application Spring. Vous pouvez l'utiliser pour accéder à des services et d'autres grains de printemps via « ctx.getBean ( « fooService ») »

vous devrez import com.test.TestObj ou référencer par new com.test.TestObj() comme vous l'avez indiqué.

Notez que « save » est pas un propery mais une méthode dynamique qui Grails décore la classe de domaine avec à l'exécution.

groovy:000> foo = new com.test.TestObj();
===> com.test.TestObj : null
groovy:000> foo.save()
===> com.test.TestObj : 2
groovy:000> 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top