Hibernate:力get()尊重其参数的数据类型



设置:带有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字段,结果应相同。

相关内容

  • 没有找到相关文章

最新更新