问题
I'm working on an application with Spring using SpringMVC,, i'm encountering the following error and i don't know how to deal with it .
now i have this message in Console :
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)
this is my ImportController class
/**
* @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";
}}
}
this is my Employe.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 5 ao?t 2015 11:05:44 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.my.dao.Employe" table="EMPLOYE">
<id name="id" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="nomEmploye" type="java.lang.String">
<column name="NOMEMPLOYE" />
</property>
<property name="prenomEmploye" type="java.lang.String">
<column name="PRENOMEMPLOYE" />
</property>
<property name="matriculeMY" type="int">
<column name="MATRICULEMY" />
</property>
<property name="adresse" type="java.lang.String">
<column name="ADRESSE" />
</property>
<property name="sexe" type="java.lang.String">
<column name="SEXE" />
</property>
<property name="cin" type="java.lang.String">
<column name="CIN" />
</property>
<property name="dateNaissance" type="java.lang.String">
<column name="DATENAISSANCE" />
</property>
<property name="situationFamiliale" type="java.lang.String">
<column name="SITUATIONFAMILIALE" />
</property>
<property name="dateEntree" type="java.lang.String">
<column name="DATEENTREE" />
</property>
<property name="dateSortie" type="java.lang.String">
<column name="DATESORTIE" />
</property>
<property name="numCIMR" type="java.lang.String">
<column name="NUMCIMR" />
</property>
<property name="numCNSS" type="java.lang.String">
<column name="NUMCNSS" />
</property>
<property name="numMUT" type="java.lang.String">
<column name="NUMMUT" />
</property>
<property name="profile" type="java.lang.String">
<column name="PROFILE" />
</property>
<property name="resteConge" type="java.lang.String">
<column name="RESTECONGE" />
</property>
<property name="banque" type="java.lang.String">
<column name="BANQUE" />
</property>
<property name="numCpteBanc" type="java.lang.String">
<column name="NUMCPTEBANC" />
</property>
<!-- <property name="fonction" type="java.lang.String">
<column name="FONCTION" />
</property> -->
<property name="salaire" type="float">
<column name="SALAIRE" />
</property>
<property name="indTransport" type="float">
<column name="INDTRANSPORT" />
</property>
<property name="indRepresent" type="float">
<column name="INDREPRESENT" />
</property>
<property name="indPanier" type="float">
<column name="INDPANIER" />
</property>
<many-to-one name="eDepartement" class="com.my.dao.Departement" access="field" fetch="join">
<column name="EDEPARTEMENT" />
</many-to-one>
<many-to-one name="eFonction" class="com.my.dao.Fonction" access="field" fetch="join">
<column name="EFONCTION" />
</many-to-one>
<many-to-one name="eService" class="com.my.dao.Service" access="field" fetch="join">
<column name="ESERVICE" />
</many-to-one>
<many-to-one name="eTypePaiement" class="com.my.dao.TypePaiement" access="field" fetch="join">
<column name="ETYPEPAIEMENT" />
</many-to-one>
<many-to-one name="eModePaiement" class="com.my.dao.ModePaiement" access="field" fetch="join">
<column name="EMODEPAIEMENT" />
</many-to-one>
</class>
</hibernate-mapping>
this is my Departement.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 5 ao?t 2015 11:05:44 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.my.dao.Departement" table="DEPARTEMENT">
<id name="id" type="int">
<column name="ID" />
<generator class="native" />
</id>
<property name="nomDepartement" type="java.lang.String">
<column name="NOMDEPARTEMENT" />
</property>
<set name="Employe" inverse="true">
<key column="ID" not-null="true"/>
<one-to-many class="com.my.dao.Employe" />
</set>
</class>
</hibernate-mapping>
after debuging, the problem is here :
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();
}
}
}
exactely here :
dbD.create(departement);
this DepartementImplDB class
package com.my.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
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();
Departement dept = new Departement();
try {
session.beginTransaction();
dept = (Departement) session.load(Departement.class, id);
} catch (HibernateException e) {
//LOGGER.error(e);
e.printStackTrace();
if (session.getTransaction().isActive()) {
session.getTransaction().rollback();
}
}
return dept;
}
/**
* @see com.my.dao.DepartementDao#getDepartementByNom(java.lang.String)
*/
@Override
public Departement getDepartementByNom(String nomDepartement) {
Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession();
Departement result = new Departement();
try {
session.beginTransaction();
Criteria criteria = session.createCriteria(Departement.class);
criteria.add(Restrictions.eq("nomDepartement", nomDepartement).ignoreCase());
result = (Departement) criteria.uniqueResult();
session.getTransaction().commit();
} catch (HibernateException e) {
//LOGGER.error(e);
e.printStackTrace();
if (session.getTransaction().isActive()) {
session.getTransaction().rollback();
}
}
return result;
}
/**
* @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();
}
}
this is what i want to do (UML): imgur
this is the link of my last error for more infos : Link
can some one help ?
回答1:
Your question is a real mess... but if you read the exception:
Provided id of the wrong type. Expected: class java.lang.Integer, got class java.lang.String
Anf after you take a look to your Departement
class, it has only 2 fields and one set (according to the hibernate mapping):
int id;
String nomDepartament;
Set employees;
That only can mean, youre passing the nomDepartament
field instead of id
somewhere in your code...
But as far as you are not providing, the Departement
class or DepartementImplMetier.create()
method, that is the one causing the exception I cannot say more...
So... start here focus your problems, and provide only important parts of the code.
来源:https://stackoverflow.com/questions/31874957/org-hibernate-nonuniqueresultexception-query-did-not-return-a-unique-result-46