此问题与 a question I had yesterday 有关.它们听起来像是不同的问题,但我只是想出了我认为的核心问题。我不确定重做最后一个问题是否是最好的做法,所以我只发布了一个单独的问题。
所以,回到问题上来。我有以下域类:
class Person {
static constraints = {
key unique: true
}
static mapping = {
key sqlType: 'binary(16)'
}
UUID key
}
每当我尝试调用
findByUserId
,我得到以下异常:org.springframework.dao.InvalidDataAccessResourceUsageException: Cannot query [sample.Person] on non-existent property: key
事实证明,我遇到在旧问题中描述的问题的原因是声明属性唯一意味着在验证期间,GORM 方法
findByUserId
被调用。我通过尝试实现一个执行类似操作的自定义 validator 发现了这一点。现在我的问题是,为什么会发生这种情况,我该怎么办?
当我使用 UUID 类型的身份属性 (
id
) 时,GORM 方法 get(id)
没有任何问题, 甚至 findById(id)
.例如,如果我有下面的域类:class Person {
static mapping = {
id generator: 'assigned', sqlType: 'binary(16)'
}
UUID id
Person() {
id = UUID.randomUUID()
}
}
以下测试工作得很好:
given:
Person person = new Person()
person.save()
expect:
Person.get(person.id)
Person.findById(person.id)
最佳答案
您可能需要设置 type
(代替或补充 sqlType
)。例如,对于 PostgreSQL,它是:
static mapping = {
id generator: 'assigned', type: 'pg-uuid'
}
关于hibernate - 在非主键 UUID 类型字段上使用 findBy* 方法会导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25939798/