6

私は Grails の初心者 (そしてグルーヴィーな初心者) で、いくつかの Grails チュートリアルに取り組んでいます。新しいユーザーとして、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

私は、grails シェルがすべてのコントローラー、サービス、およびドメイン オブジェクトを認識できるという印象を受けました。これどうしたの?ここで他に何かする必要がありますか?

私は別のことを試しました:

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

今回は何を間違えたのですか?

4

3 に答える 3

2

異なるパッケージに同じ名前の 2 つのドメイン クラスが存在する可能性があるため (ただし、良い考えではありません)、このパッケージが必要です。

2 番目のセッションでは、foo.save ではなく、foo.save() にする必要があります。

私はコンソールの方が好きです。操作がずっと簡単です。「grails console」を実行すると、Swing アプリが起動します。これは、Spring アプリケーション コンテキストである暗黙的な 'ctx' 変数を使用できるという点で、通常の Groovy コンソールとは少し異なります。これを使用して、「ctx.getBean('fooService')」を介してサービスやその他の Spring Bean にアクセスできます。

于 2010-01-11T06:15:24.410 に答える
2

シェルの代わりにコンソールを使用するという 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()
}
于 2010-01-11T15:05:52.640 に答える
1

あなたが示したようimport com.test.TestObjに、それを参照するnew 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> 
于 2010-01-11T06:17:48.063 に答える