Hibernate 中执行 对Oracle 数据库执行 save 方式是报 序列不存在 的问题?

来源:互联网 发布:unity3d 动态加载 编辑:程序博客网 时间:2024/06/03 20:05

网上查询出现这种问题的结论是 :

oracle 数据库插入数据不能自增可以创建sequence生成自增序列(关于sequence还不是很了解,先写解决方法,以后在了解补充)


 开始的时候,我的 映射是这样的 : 注意ID 处的配置

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.baidu.QBC_or_LocalSQL">    <class name="Department" table="BB_DEPARTMENTS">            <id name="id" type="java.lang.Integer">            <column name="ID" />            <generator class="native" />        </id>                <property name="name" type="java.lang.String">            <column name="NAME" />        </property>                <set name="emps" table="BB_EMPLOYEES" inverse="true" lazy="true">            <key>                <column name="DEPT_ID" />            </key>            <one-to-many class="Employee" />        </set>        </class>    </hibernate-mapping>

我使用<property name="show_sql">true</property>输出sql
发现只是输出了:select hibernate_sequence.nextval from dual这条语句
并没有输出  插入的 sql语句  说明select hibernate_sequence.nextval from dual这条语句在oracle中执行或许出了问题,我把这语句放入plsql中执行,果然出现:ora-02289 序列不存在 错误 
上网查询原因得出:没有自增序列
于是我在plsql中给表建立了自增:

create sequence user_deptid(自增名称)
increment by 1 
start with 1
nomaxvalue
nominvalue
nocache

映射文件改为:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.baidu.QBC_or_LocalSQL">    <class name="Department" table="BB_DEPARTMENTS">            <id name="id" type="java.lang.Integer">            <column name="ID" />            <generator class="sequence" >            <param name="sequence">user_deptid</param>            </generator>        </id>                <property name="name" type="java.lang.String">            <column name="NAME" />        </property>                <set name="emps" table="BB_EMPLOYEES" inverse="true" lazy="true">            <key>                <column name="DEPT_ID" />            </key>            <one-to-many class="Employee" />        </set>        </class>    </hibernate-mapping>
这样就可以成功的把数据save到oracle数据库中了



0 0
原创粉丝点击