Grailsは、ドメインオブジェクトを見ていないシェル
-
19-09-2019 - |
質問
私は、Grailsの初心者(とGroovy初心者)だ、と私はいくつかの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のシェルは、コントローラ、サービス、およびドメインオブジェクトのすべてを見ることができたという印象の下にありました。これでまで何ですか?私はここで何かを行う必要がありますか?
私は1つの他の事を試してみました
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
の使用についての答えを見ました。しかし、この約1?
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
私は間違ってこの時間を行うWhat'd?
解決
私は2番目のバートのアドバイス。例外に関してます:
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つのドメインクラスを持っているパッケージを必要とします。
2回目のセッションのために、(foo.saveなければならない)、foo.saveない。
私はコンソールを好む、それはで動作するように多くの方が簡単です。ファイル名を指定して実行「Grailsのコンソール」とSwingのアプリが起動します。それは、Springアプリケーションコンテキストで利用できる暗黙の「CTX」変数を持っているという点で、これは通常のGroovyのコンソールから少し違うのです。あなたは「ctx.getBean( 『fooService』)」
を経由してサービスや他のSpring Beanにアクセスするためにそれを使用することができますあなたが示されているようimport com.test.TestObj
ことによってそれをnew com.test.TestObj()
または参照する必要があります。
「save
が」properyが、Grailsの実行時にドメインクラスを飾る動的な方法ではないことに注意してください。
groovy:000> foo = new com.test.TestObj();
===> com.test.TestObj : null
groovy:000> foo.save()
===> com.test.TestObj : 2
groovy:000>