RSS
热门关键字:  数据挖掘  数据仓库  商业智能  人工智能  搜索引擎

org.hibernate.exception.ConstraintViolationException 比较特殊,这个问题确实难搞

来源: 作者: 时间:2008-01-07 点击:

有一个表结构:
/*==============================================================*/
/*   Table:   INTERFACE_ID_MAPPING                                                                     */
/*==============================================================*/
create   table   INTERFACE_ID_MAPPING   (
      OTHER_ID                           varchar(20)                                         not   null,
      OBJECT_ID                         numeric(10)                                         not   null, 数据挖掘研究院
      OBJECT_NAME                     varchar(128)                                       null,
      OBJECT_TYPE                     numeric(10)                                         not   null,
      MARK                                   varchar(20)                                         null,
      MEMO                                   varchar(255)                                       null,


      INDEX_TYPE                       numeric(10)                                         null,
      ENTITY                               numeric(10)                                         null,
      constraint   PK_INTERFACE_ID_MAPPING   primary   key   (OTHER_ID,   OBJECT_TYPE)
)
go

/*==============================================================*/
/*   Index:   IDX_INTERFACE_ID_MAPPING         唯一索引                                                     */

数据挖掘研究院


/*==============================================================*/
create   unique   index   IDX_INTERFACE_ID_MAPPING   on   INTERFACE_ID_MAPPING   (
OBJECT_ID   ASC,
OBJECT_TYPE   ASC
)
go

=====================================================================

配置xml文件:
<?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>
<class   name="com.willfar.wfec.biz.archive.common.entity.InterfaceIdMapping"
table="INTERFACE_ID_MAPPING">
<composite-id   name="id" class="com.willfar.wfec.biz.archive.common.entity.InterfaceIdMappingId">
<key-property   name="otherId"   type="java.lang.String"> 数据挖掘实验室
<column   name="OTHER_ID"   length="20"   />
</key-property>
<key-property   name="objectType"   type="java.lang.Long">
<column   name="OBJECT_TYPE"   length="10"   />
</key-property>
</composite-id>

<property   name="objectName"   type="java.lang.String" column="OBJECT_NAME"   not-null="false"   length="128"   />
<property   name="objectId"   type="java.lang.Long"   column="OBJECT_ID"   not-null="true"   length="10"   />
<property   name="indexType"   type="java.lang.Long"   column="INDEX_TYPE"   not-null="false"   length="10"   /> 数据挖掘研究院
<property   name="mark"   type="java.lang.String"   column="MARK"   not-null="false"   length="20"   />
<property   name="memo"   type="java.lang.String"   column="MEMO"   not-null="false"   length="255"   />
<property   name="entity"   type="java.lang.Long"   column="ENTITY"   not-null="false"   length="10"   />
</class>
</hibernate-mapping>
=============================================================================
操作代码:   idMapping已经存在.
//删除idMapping对象
Global.getArchiveServiceLocator().getInterfaceIdMappingHbService().delete(idMapping);

InterfaceIdMapping   idMappingNew   =   new   InterfaceIdMapping();
          idMappingNew.setOtherId(dto.getNEWDNBJBH());                       //生成一个新的Long编号 数据挖掘研究院
          idMappingNew.setObjectType(idMapping.getObjectType());   //唯一索引的值不变
          idMappingNew.setObjectId(idMapping.getObjectId());           //唯一索引的值不变
//增加到数据库
Global.getArchiveServiceLocator().getInterfaceIdMappingHbService().create(idMappingNew);

代码就是这么简单.平常运行是没有问题的.
问题就是:如果把这段代码放在事务中,hibernate与spring都报错:
org.hibernate.exception.ConstraintViolationException:   could   not   insert
......
Caused   by:   com.sybase.jdbc3.jdbc.SybSQLException:   Attempt   to   insert   duplicate   key   row   in   object   'INTERFACE_ID_MAPPING'   with   unique   index   'IDX_INTERFACE_ID_MAPPING'
就是唯一索引出错.

2个问题:
A   为什么不放在事务中可以正常(不用说是可以运行的,呵呵)
B   放在事务中,为什么就出现唯一索引问题???
我hibernate用了一年多,还算可以,
请高手指点.先谢过.

Create By Any-Extract(WL-AE)

数据挖掘研究院

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?