hibernate 保存POJO数据到oracle
使用hibernate框架对pojo数据进行save到数据库时(笔者碰到的问题是在操作oracle数据库),由于某些配置不当会引起一些错误,
如:org.hibernate.exception.SQLGrammarException: could not get next sequence value
这是因为数据库表中id作为主键设置自动增长,而pojo模型中的id(如 userid)没有设置产生的找不到序列问题;解决方法:
hibernate连接oracle有两种方式,一种是制定sequence的名字 如:
<idname="id"column="ID"><generatorclass="sequence"><paramname="sequence">DEPARTMENT_ID_SEQ</param></generator></id>
如果要使用native,则必须创建名为HIBERNATE_SEQUENCE的sequence
CREATESEQUENCEHIBERNATE_SEQUENCEMINVALUE1MAXVALUE99999
< id name="id" column="ID"> < generator class="native" /> < /id>
另外如果采用上述的native主键生成策略需创建一个触发器对改序列进行引用(sequence暂无验证),否则可能会报org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update错误:
create or replace trigger 触发器名
before insert on 表名
for each row
declare
begin
select seq_user.nextval
into:new.主键名 from dual;
end trigger_user;
另外产生org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update错误也有可能是插入的数据长度超出数据库该字段设置的长度所致