1

ユーザー ドメイン クラスで beforeInsert を使用しようとしています。

 class User {

    String reEnterPassword

    static constraints = {

        password(blank: false, nullable: false, size:5..50, validator: {password, obj ->
         def reEnterPassword = obj.properties['reEnterPassword']
         if(reEnterPassword == null) return true 
         reEnterPassword == password ? true : ['invalid.matchingpasswords']
         })
        reEnterPassword(bindable:true, blank: false);
    }


    def beforeInsert = {
        password = password.encodeAsSHA()
        }

    String toString(){
        name
        }


    static transients = ['reEnterPassword']

    }

私のコントローラーには、saveメソッドがあります(生成されました)

    def save() {
    def userInstance = new User(params)
    if (!`userInstance.save(flush: true)`) {
        render(view: "create", model: [userInstance: userInstance])
        return
    }

これは、ドメイン オブジェクトの save メソッドが SQL 例外に遭遇したときに、例外 Grails ランタイム例外 org.hibernate.AssertionFailure: null id in entry (例外が発生した後にセッションをフラッシュしないでください) をスローしています。

イベント内でセッションをフラッシュしようとしないという自動タイムスタンプのドキュメントを読みました(obj.save(flush:true)などを使用)。フラッシュ中にイベントが発生するため、これにより StackOverflowError が発生します。

この場合、userInstance.save(flush: true)私の保存方法を削除しようとしましflush:trueたが、それでも同じエラーが発生します。Flus:true..then を削除すると、呼び出す必要があります。hibenate がこれらすべてのレコードをフラッシュするとき。

この JIRA チケットで定義されたソリューションを試し ました。助けてください。ありがとうございました

4

3 に答える 3

1

他の検証エラーがある可能性はありますか?

コードを beforeValidate メソッドに入れると、次のように機能します。

def beforeValidate = {
     password = password.encodeAsSHA()
}

私はあなたを助けるには遅すぎると思いますが、同じ問題を抱えている他の人に役立つことを願っています.

ごきげんよう、ウルス

于 2013-01-23T08:23:50.440 に答える
0

あなたの

def beforeInsert = {
    password = password.encodeAsSHA()
}

def beforeInsert() {
    password = password.encodeAsSHA()
}

そして、それはトリックを行う必要があります

于 2012-08-28T15:21:40.263 に答える
0

beforeInsert メソッドが false を返すと、「null id in entry」例外が発生すると思います。おそらく、これは検証が失敗したことを示すものとして扱われます。

たとえば、次の場合は例外が発生します

def beforeInsert() {
  flag = false
}

ただし、以下は問題なく動作するはずです

def beforeInsert() {
  flag = false
  return true
}
于 2012-11-06T17:28:35.730 に答える