ユーザー ドメイン クラスで 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 チケットで定義されたソリューションを試し ました。助けてください。ありがとうございました