表:
序号 字段中文名称 字段名称 类型 长度 是否为空 主键
1 油费ID YFID number (10) not null, PK
2 车牌号码 CPHM varchar2 (30) ,
3 加油时间 JYSJ date not null,
4 油卡号码 YKHM varchar2 (60) ,
5 加油次数 JYCS number (5) ,
6 加油数量 JYSL number (8,2) ,
7 加油金额 JYJE number (11,2) ); xml:
<class name="com.dhc.dao.entity.TYfb" table="T_YFB">
        <id name="yfid" type="java.lang.Long">
            <column name="YFID" precision="10" scale="0" />
            <generator class="sequence" >
 <param name="sequence">SU_YFID</param>
</generator>
        </id>
        <property name="ykhm" type="java.lang.String">
            <column name="YKHM" length="15" />
        </property>
        <property name="jycs" type="java.lang.Integer">
            <column name="JYCS" precision="2" scale="0" />
        </property>
        <property name="jysl" type="java.lang.Double">
            <column name="JYSL" precision="8" />
        </property>
        <property name="jyje" type="java.lang.Double">
            <column name="JYJE" precision="10" />
        </property>
        <property name="jysj" type="java.util.Date">
            <column name="JYSJ" length="7" not-null="true" />
        </property>
        <many-to-one name="tclxxb" class="com.dhc.dao.entity.TClxxb">
<column name="CPHM" length="10" sql-type="VARCHAR2" />
</many-to-one>
    </class>实体java:
private Long yfid; private String ykhm; private int jycs; private Double jysl; private Double jyje; private Date jysj;

private TClxxb tclxxb;.........get().........set()调用方法:this.oilFareDao.saveOilEntity(tyfbEntity);//tyfbEntity这里面除了yfid都有设值每次执行到这里都报错:2010-07-15 13:59:44,515 ERROR [org.hibernate.util.JDBCExceptionReporter] - ORA-00001: 违反唯一约束条件 (VMSUSER.PK_ID)2010-07-15 13:59:44,515 ERROR [org.hibernate.util.JDBCExceptionReporter] - ORA-00001: 违反唯一约束条件 (VMSUSER.PK_ID)

解决方案 »

  1.   

    找到原因了,是序列号的问题
    <param name="sequence">SU_YFID</param>
    这个地方错了我重新换个序列号,
    CREATE SEQUENCE emp_sequence  INCREMENT BY 1  START WITH 1    NOMAXVALUE       NOCYCLE    
    把配置文件改成:
    <param name="sequence">emp_sequence</param>
    就ok了现在的问题是,我是修改原有的项目,里面已经有很多数据了。
    怎么查看并修改原来的序列号,已解决这个问题
      

  2.   

    运行:
    select sequence_name,min_value,max_value,increment_by,last_number from user_sequences
    结果如下:
    sequence_name min_value max_value increment_by last_number
      SU_YFID       1        10000000       1            381------------------------------------
    最大的一条记录才381啊,远小于10000000。真是奇怪了
      

  3.   

    你这个381的序列名称是SU_YFID  不是emp_sequence 。 
      

  4.   

    你只用到了381数据,当然last number只有381
      

  5.   

    你们都没理解,或者说是我没说明白。
    是用的SU_YFID,数据也是只到381
    我说的是,怎么自动增长的序列,我在保存数据的时候,都会出现重复值(我换成emp_sequence后就可以加入数据,不报违反唯一约束条件错误)
      

  6.   

    <many-to-one name="tclxxb" class="com.dhc.dao.entity.TClxxb">
    <column name="CPHM" length="10" sql-type="VARCHAR2" />
    </many-to-one>
    定义了一个多对一的关系,如果基于"CPHM"建立的索引不可重复,在事务执行到向"tclxxb"插入的时候就会出现 违反唯一约束条件 。
      

  7.   

    <many-to-one name="tclxxb" class="com.dhc.dao.entity.TClxxb">
    <column name="CPHM" length="10" sql-type="VARCHAR2" />
    </many-to-one>
    定义了一个多对一的关系,如果基于"CPHM"建立的索引不可重复,在事务执行到向"tclxxb"插入的时候就会出现 违反唯一约束条件 。