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

标签 hibernate grails gorm hsqldb

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

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

当我调用save()时,我相信在后台会调用休眠的saveOrUpdate()。它正在将新的域对象字段值与已经存在的域对象字段值进行比较,以决定是否应将记录插入数据库中,还是应该仅更新已存在的记录。

由于JASYPT加密,由于password字段始终是一个新值,因此每次都会插入一个新记录。
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=')

这是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 = {}
}

有没有一种方法可以告诉GORM在保存域对象时忽略密码字段,这样我就不会一次又一次地在数据库中遇到相同的用户?

谢谢你的帮助。

最佳答案

保存新用户之前,可以检查该用户是否已经存在:

User user = User.findByUserId("user1") ?: new User(userId:"user1", userFname:"Joe",
                                                userLname:"Blow", userMinit:"A", 
                                                userEmail:"joe@blow.com",
                                                userPword:"password").save(flush: true)

关于hibernate - 使用GORM保存方法时如何忽略域对象上的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128596/

相关文章:

grails - Intellij不再在Grails中运行单个Spock测试

grails - 域类中使用的特殊数据类型

java - Spring 与 Hibernate 的集成测试失败

maven - Grails 2.2.1应用程序无法解决依赖关系

grails - Active Record和GORM休眠

grails - Grails 2.5.0-set上的metaParams?

grails - Grails查询:获取关联对象列表

hibernate - 将 ORM 与严格的 MVC 框架结合使用

hibernate - JPA 实体是否可以具有未映射到 DB 列的字段

java - 我在 hibernate(hibernate 3.5.5) 中遇到了 LikeExpression 的过期问题