GroovyRowResult强制进入域对象
鉴于此表:GroovyRowResult强制进入域对象,groovy,Groovy,鉴于此表: CREATE TABLE todouser ( id SERIAL, email varchar(80) UNIQUE NOT NULL, password varchar(80), registered boolean DEFAULT FALSE, confirmationUri varchar(280), CONSTRAINT todouser_pkey PRIMARY KEY (id) ); 和类别: class TodoUser { Long
CREATE TABLE todouser
(
id SERIAL,
email varchar(80) UNIQUE NOT NULL,
password varchar(80),
registered boolean DEFAULT FALSE,
confirmationUri varchar(280),
CONSTRAINT todouser_pkey PRIMARY KEY (id)
);
和类别:
class TodoUser {
Long id;
String email;
String password;
String confirmationUri;
boolean registered;
}
我正在努力做到以下几点:
TodoUser user = sql.firstRow("""SELECT * FROM todouser WHERE email = $email""")
i、 e.我希望Groovy处理GroovyRowResult到我的基本POGO中的强制操作,而不是像中那样自己构建它
我认为这是合理的,因为GroovyRowResult实现了映射,它只是POGO实例变量名映射的映射键。。。Groovy支持的东西
问题是,在PostgreSQL表中,“confirmationUri”实际上显示为“confirmationUri”。。。所以映射失败了,因为在我的POGO中“U”是大写的
我试着将表和POGO中的“confirmationUri”更改为“confirmation”,它可以工作。。。但是为了记录在案,在Groovy中您将如何解决这个问题
我似乎记得Groovy类中有一些方法可以重写,它们有助于解决“set/get”调用。但这是正确的方法吗?当调用“get/set”方法时,是否有一些注释可以用来将“confirmationUri”标记为等同于“confirmationUri”?或者在Groovy中还有其他方法可以做到这一点?我找到了一个解决方案。以下是对TodoUser的更改(注意:此后我将列名更改为“confirmation_uri”):
这正如预期的那样工作(在下面的手动测试中,以及实际使用它从GroovyRowResult转换为TodoUser时):
这是一种方法。我不认为这种方法有什么错(但也许我错了)。有更好的方法吗/这种方法有什么问题吗?我认为你的编辑应该是这个问题的答案。让其他人回答,最高票数可以说是最好的办法。Thx Michael,我接受了你的建议。
class TodoUser {
Long id;
String email;
String password;
String confirmationUri;
boolean registered;
def propertyMissing(String name, value) {
if(isConfirmationUri(name)) {
this.confirmationUri = value
} else {
unknownProperty(name)
}
}
def propertyMissing(String name) {
if(isConfirmationUri(name)) {
return confirmationUri
} else {
unknownProperty(name)
}
}
def isConfirmationUri(String name) {
'confirmation_uri'.equals(name)
}
def unknownProperty(String name) {
throw new MissingPropertyException(name, this.class)
}
}
TodoUser user = new TodoUser();
try {
user.invalidProperty = 'http://blah.com'
} catch(MissingPropertyException e) {
e.printStackTrace()
Class type = e.getType()
String prop = e.getProperty()
println """Could not set the $prop property on type $type"""
}
user.confirmation_uri = 'http://blah.com'
println user.confirmationUri