2012-03-12 5 views
0

Grails 2.0.1のspring-security-coreプラグインで作成された標準のユーザークラスがあります。私は、mongodbプラグインを使用して永続性のためにmongodbを使用します。beforeInsertでDateプロパティを初期化する際に例外が発生しても失敗します。

私は、ユーザークラスにDateプロパティを追加し、この

def beforeInsert() { 
    userCreated = new Date() 
    encodePassword() 
} 

ユーザーはもはや永続化されるようなものにbeforeInsert()イベントハンドラを変更した場合。例外は表示されていません。ただ静かに失敗します。 それが定義されているとき、私はuserCreatedプロパティを初期化した場合:

Date userCreated = new Date() 

とbeforeInsert()イベントハンドラから初期設定を削除し、すべてが正常に動作します。 誰もその行動の説明をしていますか?

ところで、私は故意に自動タイムスタンプ機能を使用しません。パスワードの作成に日付を使用したいからです。自動タイムスタンプでdateCreatedを使用すると、beforeInsert()イベントハンドラが呼び出されてパスワードが機能しなくなった後にdateCreatedフィールドが更新されます。

+0

てみはConfig.groovyにgrails.gorm.failOnErrorを追加して、もう一度あなたのコードを実行していると仮定してencodePassword()メソッドは、serviceメソッドではありませんので、トランザクションにbeforeInsertコードをラップしてみてください。モデルに問題がある場合、これは例外を表示するはずです。 – kenota

+0

conf/Config.groovyにgrails.gorm.failOnError = trueという行が追加されましたが、何も変更されていません...まだ黙って失敗しています... –

答えて

0

は私が

+0

私はあなたを正しく理解しているかわかりません。これはあなたが話していることですか?メソッドに注釈を追加しますか? \t @Transactional \tデフbeforeInsert(){ \t \t作成=新しいDate() \t \t encodePassword() \t} –

+0

それとも、このようなものを使用してもしかして:\t DEF beforeInsert(){ \t \t User.withTransaction{ \t \t \t =新しいDate() \t \t \t encodePassword() \t \tを作成}\t}しかし、運がなかった...まだ同じ問題。 encodePassword()はサービスではありません。ドメインクラスのちょうどヘルパーメソッド。 –

+0

私はあなたの最後のコメントを意味しました。だから.. beforeInsertでは、自分のプロジェクトでwithNewSession {session-> ...}を使用しました。それがあなたを助けるかもしれないかもしれません... – jenk

関連する問題