2016-06-12 9 views
0

私はHibernateを単にGrailsに保存するのに苦労しています。私はこの例のためのサンプル/チュートリアルを見つけることができませんでした。GrailsサービスでHibernate sessionfactoryを入力

私はGORM、足場などを探していません。私のサービスでsessionFactoryを使用して、UserEntityを維持しようとしています。

 def sessionFactory 
     def hibSession = sessionFactory.getCurrentSession() 
     UserEntity userEntity = new UserEntity(); 
     userEntity.setEmail("grails") 
     hibSession.save(userEntity); 
     hibSession.flush() 

しかし、sessionFactoryはnullと言います。

私のサービスでsessionfactoryにアクセスする方法はわかりません。

ご案内しています。

答えて

1

編集2:統合テストを作成して、sessionFactoryが正しく注入されていることを確認します。次のGrailsコマンドを実行します。

create-integration-test <package>.MyService

あなたはそれが存在する場合は、テスト/ユニットディレクトリにユニットテストファイルMyServiceSpec.groovyを削除する必要があります。

は、次のテストを実装します。

class MyServiceSpec extends Specification { 

    def myService 

    def setup() { 
    } 

    def cleanup() { 
    } 

    void "test something"() { 
     when: 
     def u = myService.serviceMethod() 

     then: 
     u != null 

    } 
} 

あなたはまた、私は以下の行ったように、テスト作業をするためにユーザーインスタンスを返すために、あなたのサービスメソッドを変更する必要があります。このテストは

実行test-app <package.MyService -integration

に合格していますか?そうでない場合は、開発環境に関する詳細情報を提供してください。

を編集してください:これはおそらくこの場合は関係ありませんが、Grailsのバージョン/開発環境は何ですか?質問をするときにそれを指定する方が良いです。

まず、GORMを使用していないのはなぜですか?私はgrailsをコアの機能を使用せずに使うことで多くのメリットは得られません。なぜGORMの代わりにsessionFactoryを使用してORMを管理したいのですか?あなたがちょうどnew UserEntity(email:'grails').save()と呼ぶならば、GORMはフードの下で同じことをします。

これは私の次のポイントになります。あなたはGroovyの機能を使用していません。 Groovyでは、上記のようにマップコンストラクタを使用することができ、そのようなsetterメソッドを使用することもできます:user.email = 'grails'.

サービスメソッドが呼び出された後、 。ただし、これは、サービスメソッドがトランザクション型で、デフォルトでは適用されます。

私はGrailsを使用することをお勧めしませんが、IMHOではGroovyとGrailsの強力なツールを活用せず、Java、Spring、Hibernateをコーディングします。ドメインクラス、コントローラ、ビュー、サービスなどの規約を使用するだけで、その価値があるかどうかわかりません。しかし、それはあなたの選択です。あなたのアプローチは、私が一番言いたいことを驚かせます。

次は、コードの動作方法です。

MyService。グルーヴィー:

@Transactional 
class MyService { 

    def sessionFactory 

    UserEntity serviceMethod() { 
     def s = sessionFactory.currentSession 
     def u = new UserEntity(email:'grails') 
     s.save(u) 
     //or: 
     //def user = new UserEntity() 
     //user.email = 'grails' 
     //s.save(user) 
     //or do it the Java way like in your code 

     u.id ? u : null     
    } 
} 

sessionFactoryは、春には、起動時に命名規則によって、それを注入できるように、サービス内のフィールドとして宣言する必要があります。あなたのコードから判断すると、あなたは春と依存関係の注入に関するさらなる読書をするべきです。 あなたは、私が行ってきました は、実際に私は私のGrailsフレームワークでは、フロントエンドとしてGWTを使用しています、詳細な回答のためTutorialspoint .`

+0

おかげで、最初のステップバイステップを実行して、それを学ぶために、the official Spring documentationを見ているか、可能性私が見つけたチュートリアルでatleastと私はすでにGWTのビューを持っているので、私はデータベースからいくつかのデータを送信する必要があるので、私は今、冬眠をやろうとした。 私は上記のurコードを使用しましたが、 'sessionFactory'はnullと言います。 私のsessionFactoryがnullである理由を教えてください。他の場所に定義する必要がありますか、何かがありません。 thanks – junaidp

+0

Grailsのバージョンは何ですか?サービスコードをどのようにテストしますか?私は私の答えにサンプルの統合テストを含めます。単体テストでは、豆はオートワイヤードではありません。 – nst1nctz

+0

まだこの問題を解決できますか? – nst1nctz

関連する問題