这个问题涉及a question I had yesterday异常。他们听起来像不同的问题,但我只是想出了我认为的核心问题。我不确定重做最后一个问题是否是这里最好的行动方案,所以我只是发布了一个单独的问题。使用非主键UUID类型字段findBy *方法导致
那么,回到问题。我有以下域类:
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方法被调用。我通过尝试实现一个类似的自定义验证器来发现这一点。
现在我的问题是,为什么会发生这种情况,我能做些什么呢?
当我使用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)
我会尝试查看正在执行的SQL。我猜hibernate没有正确处理UUID对象到二进制列的映射。您可以在'DataSource.groovy'中添加'logSql = true'来打开日志记录。 – MattZ 2014-09-19 21:07:05
我不确定UUID到二进制列的映射,因为如果该字段是id,它工作正常。我已经更新了这个问题。 – 2014-09-20 08:21:22