Pregunta

Soy un novato griales (y un novato maravilloso), y estoy trabajando a través de algunos tutoriales Grails. Como nuevo usuario, la cáscara griales es una pequeña herramienta muy útil para mí, pero no puedo encontrar la manera de hacer que ver mis clases y objetos. Esto es lo que estoy tratando:

% 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

I tenía la impresión de que la cáscara griales podía ver todos los controladores, servicios y objetos de dominio. ¿Qué pasa con esto? ¿Necesito hacer algo más aquí?

He intentado otra cosa:

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é estoy haciendo mal?

EDIT: Bueno, vi las respuestas sobre cómo usar el nombre completo y también utilizando .save() en lugar de .save. Pero ¿qué pasa con ésta?

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é he hecho mal esta vez?

¿Fue útil?

Solución

Me segundo consejo de Burt utilizar la consola en lugar de la cáscara. En cuanto a la excepción:

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

Puede usted intenta ejecutar de forma explícita este código con una transacción:

import com.test.TestObj

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

Otros consejos

Se necesita el paquete, ya que es posible (pero no es una buena idea) que tiene dos clases de dominio con el mismo nombre en diferentes paquetes.

En la 2ª sesión debe ser foo.save (), no foo.save.

Yo prefiero la consola, que es mucho más fácil trabajar con ellos. Run 'consola griales' y la aplicación oscilación comenzarán. Es un poco diferente de la consola maravillosa regular en que tiene una implícita '' CTX variable disponible que es el contexto de aplicación de primavera. Puede usar que para acceder a servicios y otros granos a través de la primavera "ctx.getBean ( 'fooService')"

tendrá que import com.test.TestObj o hacer referencia a ella por new com.test.TestObj() como lo han demostrado.

Tenga en cuenta que 'save' no es un hotel fenomenal, sino un método dinámico que Griales decora la clase de dominio con en tiempo de ejecución.

groovy:000> foo = new com.test.TestObj();
===> com.test.TestObj : null
groovy:000> foo.save()
===> com.test.TestObj : 2
groovy:000> 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top