有一个表结构:
/*==============================================================*/
/* 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用了一年多,还算可以,
请高手指点.先谢过.
org.hibernate.exception.ConstraintViolationException 比较特殊,这个问题确实难搞
来源:
作者:
时间:2008-01-07
点击:
0
最新评论共有 0 位网友发表了评论
查看所有评论
发表评论
热点关注

