Оболочка Grails, не видя объектов области

Я - новичок чаш Грааля (и отличный новичок), и я работаю через некоторые учебные руководства по чашам Грааля. Как новый пользователь, оболочка чаш Грааля является действительно полезным небольшим инструментом для меня, но я не могу выяснить, как заставить ее видеть мои классы и объекты. Вот то, что я пробую:

% 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

Что я сделал бы неправильно на этот раз?

6
задан Brandon Yarbrough 11 January 2010 в 06:22
поделиться

3 ответа

Я совет второго 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
ответ дан 17 December 2019 в 04:47
поделиться

Вам нужен пакет, поскольку это возможно (но не хорошая идея) иметь два класса домена с тем же именем в разных пакетах.

Для 2-го сеанса должно быть foo.save (), а не foo.save.

Я предпочитаю консоль, с которой намного легче работать. Запустите Console Trails 'Console' и начнется приложение Swing. Это немного отличается от обычной консоли Groovy в том, что у него есть неявная переменная «CTX», которая является контекстом приложения пружины. Вы можете использовать это для доступа к услугам и другим весенним бобам через «CTX.GetBean (« FOOSERVICE »)»

2
ответ дан 17 December 2019 в 04:47
поделиться

вы будете иметь к импорт 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> 
1
ответ дан 17 December 2019 в 04:47
поделиться