我正在使用 grails 2.2.2,并且创建了一个具有唯一字符串属性的域类:
class Myclass {
String dscr // my String attibute
static constraints = {
dscr unique: true // the code to set it unique
}
}
然后我运行 grails 控制台命令来测试这个简单的类,使用以下代码和 loggingSql = true 来查看结果查询:
def a = new Myclass([dscr:'dscr1'])
a.save()
结果查询如下:
Hibernate: select this_.id as id0_0_, this_.version as version0_0_, this_.dscr as dscr0_0_ from myclass this_ where this_.dscr=?
Hibernate: select this_.id as id0_0_, this_.version as version0_0_, this_.dscr as dscr0_0_ from myclass this_ where this_.dscr=?
Hibernate: insert into myclass (version, dscr) values (?, ?)
这里的奥秘在于两个选择查询而不是一个。正如我在这里发现的那样,一个查询的原因是选择查询是为了检查唯一性。为什么会发生第二次选择?