hibernate保存实例违反唯一约束条件 (VMSUSER.PK_ID),可表中没有这个约束啊

cyc123007512 2010-07-15 02:07:37
表:
序号 字段中文名称 字段名称 类型 长度 是否为空 主键
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)
...全文
890 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
musclehero2008 2010-08-06
  • 打赏
  • 举报
回复
<many-to-one name="tclxxb" class="com.dhc.dao.entity.TClxxb">
<column name="CPHM" length="10" sql-type="VARCHAR2" />
</many-to-one>
定义了一个多对一的关系,如果基于"CPHM"建立的索引不可重复,在事务执行到向"tclxxb"插入的时候就会出现 违反唯一约束条件 。
musclehero2008 2010-08-06
  • 打赏
  • 举报
回复
应该是事物定义的问题吧?建议检查一下事物定义的隔离级别
hedashixun 2010-08-06
  • 打赏
  • 举报
回复
<many-to-one name="tclxxb" class="com.dhc.dao.entity.TClxxb">
<column name="CPHM" length="10" sql-type="VARCHAR2" />
</many-to-one>
定义了一个多对一的关系,如果基于"CPHM"建立的索引不可重复,在事务执行到向"tclxxb"插入的时候就会出现 违反唯一约束条件 。
xianaofei 2010-07-16
  • 打赏
  • 举报
回复
和数据库中的某些关键字重名了 呵呵
  • 打赏
  • 举报
回复
所有表的主键字段名都叫“ID”吧,可能以后就会发觉这样做的好处了。
cyc123007512 2010-07-16
  • 打赏
  • 举报
回复
是这个意思。保存的时候提示 违反唯一约束条件
[Quote=引用 7 楼 zy2419 的回复:]
你是说你的序列是自动增长的,但是为什么你保存数据却值是重复的不是递增的?
[/Quote]
zy2419 2010-07-16
  • 打赏
  • 举报
回复
你是说你的序列是自动增长的,但是为什么你保存数据却值是重复的不是递增的?
cyc123007512 2010-07-16
  • 打赏
  • 举报
回复
你们都没理解,或者说是我没说明白。
是用的SU_YFID,数据也是只到381
我说的是,怎么自动增长的序列,我在保存数据的时候,都会出现重复值(我换成emp_sequence后就可以加入数据,不报违反唯一约束条件错误)
zjhiphop2006 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cyc123007512 的回复:]

运行:
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 ……
[/Quote]
你只用到了381数据,当然last number只有381
kala197 2010-07-15
  • 打赏
  • 举报
回复
呵呵 这么快找到
vber1010 2010-07-15
  • 打赏
  • 举报
回复
你这个381的序列名称是SU_YFID 不是emp_sequence 。
cyc123007512 2010-07-15
  • 打赏
  • 举报
回复
运行:
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。真是奇怪了
cyc123007512 2010-07-15
  • 打赏
  • 举报
回复
找到原因了,是序列号的问题
<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了

现在的问题是,我是修改原有的项目,里面已经有很多数据了。
怎么查看并修改原来的序列号,已解决这个问题


67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧