使用GORM保存方法时如何忽略域对象上的字段

jon*_*ity 0 grails hibernate hsqldb grails-orm

在我的应用程序中,我有一个用户域对象,其中包含一些字段,包括密码字段.密码字段是使用JASYPT的加密字符串.出于开发目的,我在启动时创建一个硬编码的新用户.它看起来像这样:

User user = new User(
    userId:"user1", userFname:"Joe", 
    userLname:"Blow", userMinit:"A",
    userEmail:"joe@blow.com", userPword:"password").save()
Run Code Online (Sandbox Code Playgroud)

当调用save()时,我相信在后台调用hibernate saveOrUpdate().它将新域对象字段值与现有域对象字段值进行比较,以确定是否应将记录插入到数据库中,或者是否应仅更新已存在的记录.

由于密码字段始终是一个新值,因为JASYPT加密它每次都插入一个新记录.

INSERT INTO USER VALUES(1,'joe@blow.com',
    'Joe','user1','Blow','A','','','',
    'gIkUvM9b6d5vrEhkKzqKz0U7uxqRpZFhiQrrBTDbKX0=')
INSERT INTO USER VALUES(2,'joe@blow.com',
    'Joe','user1','Blow','A','','','',
    'yap0S0mCb2CpGngcANpSWoLqlL6SozLYK4WbKYHSVEw=')
Run Code Online (Sandbox Code Playgroud)

这是Domain类:

@Table(name="user")
class User {

    String userId
    String userFname
    String userLname
    String userMinit
    String userEmail
    String userPword
    String userMisc1 = ""
    String userMisc2 = ""
    String userMisc3 = ""

    public User(){};

    static mapping = {
        version false
        columns {
            userId      column:'user_id'
            userFname   column:'user_fname'
            userLname   column:'user_lname'
            userMinit   column:'user_minit'
            userEmail   column:'user_email'
            userPword   column:'user_pword'
            userMisc1   column:'user_misc1'
            userMisc2   column:'user_misc2'
            userMisc3   column:'user_misc3'
        }

        userPword type: GormEncryptedStringType
     }

    static constraints = {}
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉GORM在保存域对象时忽略密码字段,这样我就不会在数据库中反复使用同一个用户了?

谢谢你的帮助.

lo_*_*oad 7

响应OP注释,您可以通过向域类添加瞬态属性来使属性在grails中非持久化:

static transients = [ "userPword", "anotherOne" ]
Run Code Online (Sandbox Code Playgroud)

但正如上面所指出的,这对你的问题没有帮助.

谢谢,吉姆.