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错误也有可能是插入的数据长度超出数据库该字段设置的长度所致

相关推荐