收到org.hibernate.TypeMismatchExceptionexception

我正在使用Spring使用Spring使用SpringMVC,我遇到了以下错误,我不知道如何处理它。

现在我在控制台中有这条消息:

org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.Integer, got class java.lang.String at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:86) at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878) at org.hibernate.impl.SessionImpl.load(SessionImpl.java:795) at org.hibernate.impl.SessionImpl.load(SessionImpl.java:788) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) at com.sun.proxy.$Proxy11.load(Unknown Source) at com.my.dao.DepartementImplDB.getDepartementByNom(DepartementImplDB.java:54) at com.my.dao.DepartementImplDB.addDepartement(DepartementImplDB.java:29) at com.my.service.DepartementImplMetier.create(DepartementImplMetier.java:57) at com.my.controller.ImportController.Read(ImportController.java:279) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) 

这是我的ImportController类

 /** * @author Ilias */ package com.my.controller; //import ... import com.my.dao.Departement; @Controller public class ImportController { DepartementImplMetier dbD = new DepartementImplMetier(); @RequestMapping(value="/read") public String Read(Model model,@RequestParam CommonsMultipartFile[] fileUpload) throws IOException, EncryptedDocumentException, InvalidFormatException, java.text.ParseException { liste = extraire(modelnom); for(int m=0, i=29;i<liste.size();i=i+29){//i=i+29 Employe employe= new Employe(); Departement departement = new Departement(); if(i % 29 == 0) m++; //... Some code here String dep = (String)liste.get(29*m+13).toString(); Departement d = new Departement(); departement.setNomDepartement(dep); boolean bool=true; List departements = dbD.getAll(); boolean depbool = true; for(int j=0;j< departements.size();j++){ if(departements.get(j).getNomDepartement() == dep ) { depbool = false; } if(depbool){ try { dbD.create(departement); } catch (Throwable e) { e.printStackTrace(); } } } for(int n=0;n<employes.size();n++){ if(employes.get(n).getMatriculeMY() == (int)mat ) { bool= false; } } if(bool){ try { dbD.create(departement); dbE.create(employe); } catch (Throwable e) { e.printStackTrace(); } } } } return "redirect"; }} } 

这是我的Employe.hbm.xml

                                                             <!--    -->                              

这是我的Departement.hbm.xml

                   

在调试之后,问题在于:

 boolean depbool = true; for(int j=0;j< departements.size();j++){ if(departements.get(j).getNomDepartement() == dep ) { depbool = false; } if(depbool){ try { dbD.create(departement); } catch (Throwable e) { e.printStackTrace(); } } } 

在这里:

 dbD.create(departement); 

这个DepartementImplDB类

 package com.my.dao; import java.util.List; import org.hibernate.Session; import com.my.util.HibernateUtil; /** * @author Ilias * */ public class DepartementImplDB implements DepartementDao { /** * @see com.my.dao.DepartementDao#addDepartement(com.my.dao.Departement) */ @Override public int addDepartement(Departement D) { // TODO Auto-generated method stub Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession(); session.beginTransaction();System.out.println("********"); session.save(D);System.out.println("departement implement metier"); session.getTransaction().commit(); D=this.getDepartementByNom(D.getNomDepartement()); return D.getId(); } /** * @see com.my.dao.DepartementDao#getDepartementById(int) */ @Override public Departement getDepartementById(int id) { // TODO Auto-generated method stub Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession(); session.beginTransaction(); Departement dept = (Departement) session.load(Departement.class, id); return dept; } /** * @see com.my.dao.DepartementDao#getDepartementByNom(java.lang.String) */ @Override public Departement getDepartementByNom(String nomDepartement) { // TODO Auto-generated method stub Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession(); session.beginTransaction(); Departement dept = (Departement) session.load(Departement.class, nomDepartement); return dept; } /** * @see com.my.dao.DepartementDao#deleteDepartement(int) */ @Override public void deleteDepartement(int id) { // TODO Auto-generated method stub Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession(); session.beginTransaction(); Departement dept = (Departement) session.load(Departement.class, id); session.delete(dept); session.getTransaction().commit(); } /** * @see com.my.dao.DepartementDao#updateDepartement(com.my.dao.Departement) */ @Override public void updateDepartement(Departement D) { // TODO Auto-generated method stub } /** * @see com.my.dao.DepartementDao#getAllDepartement() */ @Override public List getAllDepartement() { // TODO Auto-generated method stub Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession(); session.beginTransaction(); return session.createQuery("from Departement").list(); } } 

这是我的最后一个错误的链接更多信息: 链接
有人可以帮忙吗?

你的错误是

 org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.Integer, got class java.lang.String 

在您的堆栈跟踪中,我们可以看到dbd.create调用其他方法

  at com.my.dao.DepartementImplDB.getDepartementByNom(DepartementImplDB.java:54) at com.my.dao.DepartementImplDB.addDepartement(DepartementImplDB.java:29) 

在你的方法

 public Departement getDepartementByNom(String nomDepartement) 

您尝试加载具有名称的部分,但您使用了由Id加载的session.load。

  Departement dept = (Departement) session.load(Departement.class, nomDepartement); 

您必须按名称加载Criteria请求。 喜欢

 session.beginTransaction(); Criteria criteria = session.createCriteria(Departement.class); criteria.add(Restrictions.eq("nomDepartement", nomDepartement).ignoreCase()); result = (Departement) criteria.uniqueResult(); session.getTransaction().commit(); 

ps:在getDepartementById和getDepartementByNom中,您永远不会结束您的交易。 请使用如下模式:

  try { session.beginTransaction(); // your code session.getTransaction().commit(); } catch (HibernateException e) { LOGGER.error(e); if (session.getTransaction().isActive()) { session.getTransaction().rollback(); } } 

例外:-
提供了错误类型的id。 预期:类java.lang.Integer,得到类java.lang.String

通过查看上面的行非常清楚,hibernate期望id为整数但以String格式接收id。 所以它扔了: –
org.hibernate.TypeMismatchException