這個問題涉及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