ama*_*ntu 3 oracle hibernate numbers bigdecimal
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
在我的Oracle数据库中创建名为"MYTEMP_TEMP_ID_SEQ"的序列,并在Oracle中正常工作.
现在当我尝试使用hibernate插入记录时,它会给我以下错误
org.hibernate.id.IdentifierGenerationException:此id生成器生成long,integer,short或string
看来,我的顺序返回号码,hibenate考虑它作为BigDecimal的,而休眠的sequece发电机类考虑到长值,整数,短,只字符串.
Hibernate应该没有BigDecimal的问题.但我认为他们没有为序列生成器实现BigDecimal
任何人都可以帮我解决问题吗?
谢谢.
Chs*_*y76 13
说实话,我无法想象为什么你会坚持让你的ID为BigDecimal而不是长.最大长值9,223,372,036,854,775,807
虽然可以肯定是最大NUMBER(22)值的千分之一,但实际上应该足够了.如果你每秒产生一百万个标识符,你必须这样做30万年才能耗尽你的序列.
也就是说,为了将您的标识符生成为BigDecimal,您需要编写自己的生成器.您可以通过扩展Hibernate的内置SequenceGenerator并覆盖其generate()
方法来实现.您不必调用IdentifierGeneratorFactory.get()
只支持long/int/short/String的序列值,而是从结果集中获取BigDecimal的序列值.
<generator class="com.mypackage.BigDecimalGenerator">
<param name="sequence">MYTEMP_TEMP_ID_SEQ</param>
</generator>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20054 次 |
最近记录: |