使用beforeUpdate的属性更改似乎对扩展类没有影响?

时间:2012-09-24 08:50:50

标签: grails inheritance gorm

我们有以下域类继承策略。

  • AbstractDomain(包含默认属性)
  • 用户扩展AbstractDomain
  • 运营商扩展用户

在AbstractDomain中我们已经制定了实现的方法 beforeUpdate和beforeInsert使用方法,所以我们可以扩展它们 扩展课程

AbsrtractDomain

abstract class AbstractDomain {
    protected void onBeforeInsert() {
    ...
    }

    protected void onBeforeUpdate() {
    ...
    }

    def beforeInsert() {
        onBeforeInsert()
    }

    def beforeUpdate() {
        onBeforeUpdate()
    }
}

在用户类中我们有逻辑加密这样的用户密码..

用户

public class User extends AbstractDomain {
    @Override
    protected void onBeforeUpdate() {
        super.onBeforeUpdate()
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        println "encoding password!!!!"
        if (springSecurityService) { // added the if clause to ensure
that tests work correct!
            password = springSecurityService.encodePassword(password)
        }
    }
}

操作

public class Operator extends User {
// code omitted
}

因此,当我尝试更新运算符时,会看到消息“encoding 密码!!!!“该属性已设置,但当我检查数据库时 密码仍然是明文.. 我所做的改变似乎没有效果,似乎没有坚持。

有什么迹象表明我可能缺少什么?

1 个答案:

答案 0 :(得分:0)

查看代码......如果你看到“编码密码!!!”文本,但密码未编码,然后未设置springSecurityService属性,或者encodePassword函数无法工作...这与继承无关。我会把你的println INSIDE移动到if,因为那样更准确。