Java 接收org.hibernate.typemischException异常
我正在使用SpringMVC使用Spring开发一个应用程序,我遇到了以下错误,我不知道如何处理它 现在,我在控制台中看到以下消息:Java 接收org.hibernate.typemischException异常,java,spring,hibernate,hibernate-mapping,Java,Spring,Hibernate,Hibernate Mapping,我正在使用SpringMVC使用Spring开发一个应用程序,我遇到了以下错误,我不知道如何处理它 现在,我在控制台中看到以下消息: 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.o
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<Departement> 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";
}}
}
此部门为PLDB类
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<Departement> getAllDepartement() {
// TODO Auto-generated method stub
Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession();
session.beginTransaction();
return session.createQuery("from Departement").list();
}
}
这是我上一个错误的链接,了解更多信息:
有人能帮忙吗?例外:-
提供的id类型错误。应为:类java.lang.Integer,获得类java.lang.String
从上面的一行可以很清楚地看到,hibernate期望id是一个整数,但接收的id是字符串格式的。这就是投掷:-
org.hibernate.TypeMismatchException您的错误是
org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.Integer, got class java.lang.String
在stacktrace中,我们可以看到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)
您试图用名称加载部门,但使用了session.load,而不是按Id加载
Departement dept = (Departement) session.load(Departement.class, nomDepartement);
您必须发出条件请求才能按名称加载。像
session.beginTransaction();
Criteria criteria = session.createCriteria(Departement.class);
criteria.add(Restrictions.eq("nomDepartement", nomDepartement).ignoreCase());
result = (Departement) criteria.uniqueResult();
session.getTransaction().commit();
ps:在GetDepartmentById和GetDepartmentByNom中,您永远不会结束您的事务。请使用如下模式:
try {
session.beginTransaction();
// your code
session.getTransaction().commit();
} catch (HibernateException e) {
LOGGER.error(e);
if (session.getTransaction().isActive()) {
session.getTransaction().rollback();
}
}
你能把代码放在发生这种情况的地方吗?请把相关的代码也加到这个问题上。你的另一个问题是关于另一个问题的。@Tavo代码在另一个问题中?另一个问题是另一个问题。你不能指望人们在不同的页面上为你找到解决方案,因为你不必再费心把代码放在这里了。看在上帝的份上,为什么你的控制器中有这么多业务逻辑,为什么你已经有了spring,却要使用新的类名。另外,使用29、30等特定数字的循环的奇怪方式是不灵活的,也是不好的做法。我相信有更好的解决办法。另外,代码太多了,没有任何用处,因为你应该把相关的,而不仅仅是做一个转储,接下来你将做一个核心转储,并要求用户进行分析。这样不行,我的朋友。对于初学者,即使这个问题已经解决,我也建议使用Spring文档。是的,我理解它,但我没有发现问题在哪里粘贴hibernate的实体类,以及在接收此异常时执行的操作?检查department.hbm.xml、Employe.hbm.xml中的id类型,Department.java和Employee.javai更新了问题代码我添加了Department TIMPLDb现在我有另一条消息,我更新我的问题看起来您有多个同名的部门:org.hibernate.ununiqueresultException:查询未返回唯一结果:20。您可以使用criteria.list获得所有部门并获得第一个……或者只需检查为什么您有多个名称相同的部门(如果它应该是唯一的),当我调试代码时,它会给我一个infinite循环:我还认为您必须在添加部门之前检查是否存在名称相同的部门。
public Departement getDepartementByNom(String nomDepartement)
Departement dept = (Departement) session.load(Departement.class, nomDepartement);
session.beginTransaction();
Criteria criteria = session.createCriteria(Departement.class);
criteria.add(Restrictions.eq("nomDepartement", nomDepartement).ignoreCase());
result = (Departement) criteria.uniqueResult();
session.getTransaction().commit();
try {
session.beginTransaction();
// your code
session.getTransaction().commit();
} catch (HibernateException e) {
LOGGER.error(e);
if (session.getTransaction().isActive()) {
session.getTransaction().rollback();
}
}