gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:56:24 26 4
gpt4 key购买 nike

在我的应用程序中,我有一个用户域对象,其中包含一些字段,包括密码字段。密码字段是使用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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com