设置:带有Hibernate 4.3.10
的Grails 2.5.6我有一个带有字符串ID的表。事实是,它的值是数字字符串,当我传递诸如"000000"
。
get()
。域类:
class Term
{
static mapping = {
id name: 'code', generator: 'assigned'
version false
code column: 'CODE'
description column: 'DESC'
}
String code
String description
}
数据看起来像:
CODE || DESC
-------++---------------------------
000000 || The Beginning of Time
201715 || Post Secondary Winter 2017
201815 || Post Secondary Winter 2018
999999 || The End of Time
然后在测试中找到以下内容:
assert Term.list() // works fine
assert !Term.get('foo') // works fine
//assert Term.get('000000') // throws exception
抛出的例外是:
Method threw 'org.springframework.orm.hibernate4.HibernateSystemException' exception.
Provided id of the wrong type for class Term. Expected: class java.lang.String, got class java.lang.Long
org.hibernate.TypeMismatchException: Provided id of the wrong type for class Term. Expected: class java.lang.String, got class java.lang.Long
因此,在某个时候看起来" 000000"one_answers" 201715",以及其他不方便地转换为长对象。使用as String
也无济于事。谁能帮我告诉Hibernate,应该将此字符串视为字符串?
这看起来像是一个brails bug,我猜这是因为您尚未将id
声明为您的域类中的String
,因为它已映射到其他字段(这使得感觉)。
您可以尝试添加
String id
到您的域类,尽管这可能不会导致列生成的所需行为。
我建议您而不是使用get()
,您可以使用findByCode()
,因为您已将ID映射到code
字段,结果应相同。