Я использую grails 2.2.2 и создал класс предметной области с одним уникальным атрибутом String:
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 (?, ?)
Загадка здесь - два запроса select вместо одного. Причина одного запроса, как я обнаружил, здесь, заключается в том, что запрос выбора выполняется для проверки уникальности. Почему происходит второй выбор?