`
maoxy
  • 浏览: 138928 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

identifier of an instance的错误解决

阅读更多
错误提示:
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());
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics