我正在使用Oracle 11g、Java(struts2)和Hibernate开发一个应用程序。
我有一个名为mytemp的表,其中列mytemp_id的类型为NUMBER(22,0)。
在我的mytemp.hbm.xml文件中,id如下所示:
<id name="mytempId" type="big_decimal">
<column name="MYTEMP_ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">MYTEMP_TEMP_ID_SEQ</param>
</generator>
</id>
在我的Oracle数据库中,有一个名为“MYTEMP_TEMP_ID_SEQ”的序列,它在Oracle中创建并正常工作。
现在,当我尝试使用Hibernate插入记录时,它会给我以下错误信息:
org.hibernate.id.IdentifierGenerationException: this id generator generates long, integer, short or string
看起来,由于我的序列返回Number类型,而Hibernate的序列生成器类只考虑long、integer、short和string类型的值,因此Hibernate将其视为BigDecimal类型。
Hibernate不应该对BigDecimal类型有问题。但是我认为他们没有为序列生成器实现BigDecimal。
有人能帮助我解决这个问题吗?
谢谢。
SequenceGenerator
。看一下它的generate()
方法 - 你基本上会复制整个方法,并将IdentifierGeneratorFactory.get()
替换为resultSet.get()
以获取你的BigDecimal
值。 - ChssPly76