Я - новичок чаш Грааля (и отличный новичок), и я работаю через некоторые учебные руководства по чашам Грааля. Как новый пользователь, оболочка чаш Грааля является действительно полезным небольшим инструментом для меня, но я не могу выяснить, как заставить ее видеть мои классы и объекты. Вот то, что я пробую:
% 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
У меня создалось впечатление, что оболочка чаш Грааля видела все контроллеры, сервисы и объекты области. Что произошло с этим? Я должен сделать что-то еще здесь?
Я попробовал еще одну вещь:
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
Что я делаю неправильно?
Править: Хорошо, я видел ответы об использовании полного имени и также использовании .save()
вместо .save
. Но что относительно этого?
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
Что я сделал бы неправильно на этот раз?
Я совет второго Burt использовать консоль вместо оболочки. Что касается исключения:
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
Можете ли вы попробовать явно запустить этот код с транзакцией:
import com.test.TestObj
TestObj.withTransaction{ status ->
TestObj().save()
}
Вам нужен пакет, поскольку это возможно (но не хорошая идея) иметь два класса домена с тем же именем в разных пакетах.
Для 2-го сеанса должно быть foo.save (), а не foo.save.
Я предпочитаю консоль, с которой намного легче работать. Запустите Console Trails 'Console' и начнется приложение Swing. Это немного отличается от обычной консоли Groovy в том, что у него есть неявная переменная «CTX», которая является контекстом приложения пружины. Вы можете использовать это для доступа к услугам и другим весенним бобам через «CTX.GetBean (« FOOSERVICE »)»
вы будете иметь к импорт com.test. TestObj
или ссылка это новый com.test. TestObj ()
, поскольку вы показали.
Обратите внимание, что ' save
' является не свойством, а динамическим методом, с помощью которого Grails декорирует класс домена во время выполнения.
groovy:000> foo = new com.test.TestObj();
===> com.test.TestObj : null
groovy:000> foo.save()
===> com.test.TestObj : 2
groovy:000>