可能遇到的问题
Hibernate: select hibernate_sequence.nextval from dual Caused by: java.sql.SQLException: ORA-02289: 序列(号)不存在”
Caused by: java.lang.IllegalArgumentException: argument type mismatchCaused by: java.lang.IllegalArgumentException: argument type mismatch
还有一个是只支持int long sting 那个错误
解决方法
1 table sql
这里只是简述number 这个字段,id一般增长都用这个,建议用number(18),小于等于18映射到hibernate都是long类型,超过了都是BigDecimal,后面的这个类型很不好处理,或许我没看到,但是我是在不建议用这个,搜索好长时间都没解决,改成string或者什么的都会提示类型不支持BigDecimal,要么就是不匹配字段。网上有个很例外的解决方案,
<generator class="com.mypackage.BigDecimalGenerator">
<param name="sequence">MYTEMP_TEMP_ID_SEQ</param>
</generator>
没有测试。。。应该还需要类
2 sequence
这个大家晚上都能搜索到好多,不多说,上代码
-- Create sequence
create sequence SEQ_KDZJ_RIBAO
minvalue 1
maxvalue 999999999999999999999999999
start with 201
increment by 1
cache 100;
3 触发器
CREATE OR REPLACE TRIGGER tgi_kdzj_ribao BEFORE INSERT ON kdzj_ribao FOR EACH ROW
when (new.gzid is null)
begin
select seq_kdzj_ribao.nextval into:new.gzid from dual;
end;
在hibernate应用是分为两种情况
1 table sql 加上sequence 不用触发器,适用于新建数据库
hibernate代码为
<id name="gzid" type="java.lang.Long">
<column name="GZID" precision="18" scale="0" />
<generator class="sequence" >
<param name="sequence">SEQ_KDZJ_RIBAO</param>
</generator>
</id>
即可生成成功,
2 table sql 加上sequence 加上触发器,适用于兼容多种数据库的情况,这边不用变
如果你创建的sequence命名为hibernate_sequence(这个名字好像是hibernate默认的 sequence名字,不创建会出错的)
<id name="gzid" type="java.lang.Long">
<column name="GZID" precision="18" scale="0" />
<generator class="native"/>
</id>
即可生成成功
如果不是,则需要在里面类似于方法1中的那样注明sequence
<param name="sequence">SEQ_KDZJ_RIBAO</param>
即可生成成功