关于hibernate最经典的exception

在一次简单的页面UPDATE之前 我想先查询一遍这个对象

结果出现了javax.servlet.ServletException: a different object with the same identifier value was already associated with the session异常

这个主要是因为在一个页面之中已经有一个持久化对象了,但我又去查了一遍,因此在提交一次修改update请求的时候就会使session中存在着一个相同id的两个不同对象,这样处于了摸棱两可的局面。

因此我的解决方法是在update之前的select用一个别的Session

public String updateTfsj() {

try{

String[]only=onlyStr.split(",");

if(onlyStr!=null&&!onlyStr.equals("")){

for(Objecto:only){

if(o.toString()!=null){

//System.out.println(o.toString());

deleteFilesTfsjk(Integer.parseInt(o.toString()));

}

;

}

   }

   Calendar c = Calendar.getInstance();

SetfjSet=newHashSet();

appYuanmoban=(AppYuanmoban)tfsjService.load(AppYuanmoban.class,yaid);

   tfsjk.setYaid(appYuanmoban);

   if (zjId != null) {

AppPgbappPgb=(AppPgb)tfsjService.load(AppPgb.class,zjId);

tfsjk.setZjjb(appPgb);

}

String[]test=getRs(tfsjk.getId().toString());

tfsjk.setSjzt(test[0]);

tfsjk.setXfOrgid(test[1]);

   boolean bl1 = tfsjService.updateObject(tfsjk);

 return SUCCESS;

}catch(Exceptionex){

returnINPUT;

}

 }

//创建新session来select

public String[] getRs(String tfsjid) {

String[]rs=newString[2];

Sessionsession=HibernateSessionFactory.getSession();

Tfsjktf=((Tfsjk)session.createQuery("fromTfsjktwheret.id="+tfsjid).iterate().next());

rs[0]=tf.getSjzt();

rs[1]=tf.getXfOrgid();

HibernateSessionFactory.closeSession();

returnrs;

 }

相关推荐