错误提示:
2010-10-11 17:37:18 org.apache.struts.action.RequestProcessor Unhandled Exception thrown: class org.springframework.orm.hibernate3.HibernateSystemException
javax.servlet.ServletException: org.springframework.orm.hibernate3.HibernateSystemException: identifier of an instance of com.chgreatwall.ycjl.gl.webservice.domain.Cigarette was altered from 7304 to 7760; nested exception is org.hibernate.HibernateException: identifier of an instance of com.chgreatwall.ycjl.gl.webservice.domain.Cigarette was altered from 7304 to 7760
背景:
读取excel文件,导入数据库
源代码:
public void iniCigarette() {
Cigarette cigarette = new Cigarette();
String filename = "Cigarette"; // Excel文件名
try {
Workbook book = Workbook.getWorkbook(new File("H:\\"
+ filename + ".xls"));
Sheet se = book.getSheet(0);//得到第1个sheet(Excel通常会有3个Sheet)
int rownum = se.getRows(); //得到总行数
for(int i=1;i<rownum;i++){
System.out.println(i);
cigarette.setPkId(Integer.parseInt(se.getCell(0, i).getContents()));
cigarette.setItemCode(se.getCell(1, i).getContents());
cigarette.setItemId(se.getCell(2, i).getContents());
cigarette.setItemName(se.getCell(3, i).getContents());
cigarette.setShortName(se.getCell(4, i).getContents());
cigarette.setUmid(se.getCell(5, i).getContents());
cigarette.setPackBar(se.getCell(6, i).getContents());
cigarette.setBoxBar(se.getCell(7, i).getContents());
cigarette.setBigBoxBar(se.getCell(8, i).getContents());
cigarette.setStandBarName(se.getCell(9, i).getContents());
cigarette.setUmsale(se.getCell(10, i).getContents());
cigarette.setUmsaleName(se.getCell(11, i).getContents());
cigarette.setSaleUmsize(se.getCell(12, i).getContents());
cigarette.setTaxId(se.getCell(13, i).getContents());
cigarette.setTaxValue(se.getCell(14, i).getContents());
cigarette.setCantId(se.getCell(15, i).getContents());
cigarette.setCantName(se.getCell(16, i).getContents());
cigarette.setShelfPer(se.getCell(17, i).getContents());
cigarette.setColour(se.getCell(18, i).getContents());
cigarette.setItemKind(se.getCell(19, i).getContents());
cigarette.setItemIdcct(se.getCell(20, i).getContents());
cigarette.setStandBarCode(se.getCell(21, i).getContents());
cigarette.setIsNormal(se.getCell(22, i).getContents());
cigarette.setSpec(se.getCell(23, i).getContents());
cigarette.setKind(se.getCell(24, i).getContents());
cigarette.setTarCount(se.getCell(25, i).getContents());
cigarette.setGasNicotine(se.getCell(26, i).getContents());
cigarette.setCocont(se.getCell(27, i).getContents());
cigarette.setBarKind(se.getCell(28, i).getContents());
cigarette.setBarKey(se.getCell(29, i).getContents());
cigarette.setPackKind(se.getCell(30, i).getContents());
cigarette.setProductType(se.getCell(31, i).getContents());
cigarette.setFnational(se.getCell(32, i).getContents());
cigarette.setIsImported(se.getCell(33, i).getContents());
cigarette.setBarType(se.getCell(34, i).getContents());
cigarette.setFilterColor(se.getCell(35, i).getContents());
cigarette.setDescription(se.getCell(36, i).getContents());
cigarette.setUnitCost(se.getCell(37, i).getContents());
cigarette.setShortCode(se.getCell(38, i).getContents());
cigarette.setBrdType(se.getCell(39, i).getContents());
cigarette.setItemKind1(se.getCell(40, i).getContents());
cigarette.setAbc(se.getCell(41, i).getContents());
cigarette.setItemType1(se.getCell(42, i).getContents());
cigarette.setItemType1name(se.getCell(43, i).getContents());
cigarette.setItemType2(se.getCell(44, i).getContents());
cigarette.setItemType2name(se.getCell(45, i).getContents());
cigarette.setCategory(se.getCell(46, i).getContents());
cigarette.setBrandId(se.getCell(47, i).getContents());
cigarette.setBrandName(se.getCell(48, i).getContents());
cigarette.setMfrid(se.getCell(49, i).getContents());
cigarette.setMfrname(se.getCell(50, i).getContents());
cigarette.setNetDate(se.getCell(51, i).getContents());
cigarette.setIsMrb(se.getCell(52, i).getContents());
cigarette.setIsHundredBrand(se.getCell(53, i).getContents());
cigarette.setIsLowend(se.getCell(54, i).getContents());
cigarette.setIsRare(se.getCell(55, i).getContents());
cigarette.setIsMature(se.getCell(56, i).getContents());
cigarette.setUpLimitRate(se.getCell(57, i).getContents());
cigarette.setDownLimitRate(se.getCell(58, i).getContents());
cigarette.setDealType(se.getCell(59, i).getContents());
cigarette.setIsCosting(se.getCell(60, i).getContents());
cigarette.setStatus(se.getCell(61, i).getContents());
cigarette.setIsBreed(se.getCell(62, i).getContents());
cigarette.setIsCollectStore(se.getCell(63, i).getContents());
cigarette.setIsCollectPri(se.getCell(64, i).getContents());
cigarette.setOutDate(se.getCell(65, i).getContents());
cigarette.setPri(se.getCell(66, i).getContents());
cigarette.setPri3(se.getCell(67, i).getContents());
cigarette.setRsn(se.getCell(68, i).getContents());
cigarette.setIsCtlWhse(se.getCell(69, i).getContents());
cigarette.setPlans(se.getCell(70, i).getContents());
cigarette.setForeQty(se.getCell(71, i).getContents());
cigarette.setComId(se.getCell(72, i).getContents());
cigarette.setFuserName(se.getCell(73, i).getContents());
cigaretteDAO.attachDirty(cigarette);
}
book.close();
} catch (Exception e) {
e.printStackTrace();
}
}
错误原因:
Cigarette cigarette = new Cigarette();初始化的位置错误。
由于在一个事务中更新了主键,而主键是不能被更新的.
这句代码放在for循环的外面,因此每次循环插入的时候,Hibernate认为只是一个对象,主键被更新,因此报错,如果放在for循环里面,就正常了,每次插入都是一个新的对象.
修改:
将放在for循环里面
for(int i=1;i<rownum;i++){
Cigarette cigarette = new Cigarette();
System.out.println(i);
cigarette.setPkId(Integer.parseInt(se.getCell(0, i).getContents()));
cigarette.setItemCode(se.getCell(1, i).getContents());
分享到:
相关推荐
为了帮助开发者更好地理解和解决这些问题,本篇将详细介绍一系列常见的Delphi错误提示,并提供相应的中英文对照说明。 #### 二、错误提示详解 1. **`; not allowed before` ELSE** - **中文说明**:在“ELSE”前...
### Hibernate常见错误解决方案 在开发基于Hibernate框架的应用程序时,我们经常会遇到各种各样的异常情况。这些异常不仅会影响系统的正常运行,还可能增加调试难度。本文将针对几个常见的Hibernate异常进行详细...
40. **Constructing instance of `<name>` containing abstract methods** - **含义**: 正在创建包含抽象方法的 `<name>` 类实例。 - **解决办法**: 实现所有抽象方法或创建子类并实现抽象方法。 41. **Could ...
错误 C2466: cannot allocate an array of constant size 0 - **描述**:尝试创建大小为0的数组。 - **原因**: - 数组尺寸设置为0。 - **解决方法**: - 修改数组大小为正整数。 ### 7. 错误 C2664: 'function...
39. **Constructing instance of '...' containing abstract methods** - **含义**:正在实例化包含抽象方法的对象。 - **解决方案**:确保类中所有抽象方法都被实现。 40. **Could not compile used unit '...'*...
- **解决方法**:根据具体错误信息排查问题,可能需要数据库专家介入。 #### ORA-00021: Unable to allocate shared memory segment - **描述**:无法分配共享内存段。 - **解决方法**:增加内存或调整内存参数。 ...
- FIX: In "Windows ClearType" font rendering mode (OS Windows mode) the "garbage" pixels can appear from the right and from the bottom sides of the painted rectangle of the TFlexText object....
10. **identifier of an instance of... was altered from... to...** - 这个错误提示表明尝试更改已持久化对象的标识符(ID),这是不被允许的。在`ChangID()`方法中,尝试更改新创建对象的ID,会导致Hibernate发出...
TransientObjectException: object references an unsaved transient instance 这个异常通常发生在级联操作中,例如当配置了`cascade="save-update,persist"`。如果在保存一个对象时,该对象引用了一个未保存的...
FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,...