在非主键UUID类型字段上使用findBy *方法会导致异常

时间:2014-09-19 17:58:57

标签: hibernate grails gorm

此问题与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被调用。我通过尝试实现类似的自定义验证器来发现这一点。

现在我的问题是,为什么会发生这种情况,我该怎么办呢?

当我使用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)

1 个答案:

答案 0 :(得分:0)

您可能需要设置type(代替sqlType或代替static mapping = { id generator: 'assigned', type: 'pg-uuid' } )。例如,对于PostgreSQL,它是:

staticDrop