java - how to solve org.hibernate.TypeMismatchException? -


i try develop server program using spring mvc , hibernate. @ tables, tables have 2 primray keys. so, want use these keys.

simply, use double @id annotations.

in result, got org.hibernate.typemismatchexception. although searched solve error, can't solve problem... me please.

this model class.

package kr.ac.jbnu.jinggumdari.model;  import java.io.serializable;  import javax.persistence.cascadetype; import javax.persistence.column; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.id; import javax.persistence.manytoone; import javax.persistence.table;  import org.hibernate.annotations.genericgenerator; import org.hibernate.annotations.naturalid; import org.hibernate.annotations.parameter;  import com.fasterxml.jackson.annotation.jsonignoreproperties;  @entity @table(name="festival_info") @jsonignoreproperties({"hibernatelazyinitializer", "handler"}) public class interest implements serializable{     @id     @column(name="interest")     private string interest;      @id     @column(name="festival_number", unique=true, nullable=false)     @generatedvalue(generator="gen")     @genericgenerator(name="gen", strategy="foreign", parameters=@parameter(name="property", value="festival_info"))     private string festivalnumber;       public interest(){         festivalnumber = "";         interest = "";     }     public interest(string festivalnumber, string interest) {         this.festivalnumber = festivalnumber;         this.interest = interest;     }      public string getfestivalnumber() {         return festivalnumber;     }     public void setfestival_number(string festivalnumber) {         this.festivalnumber = festivalnumber;     }     public string getinterest() {         return interest;     }     public void setinterest(string interest) {         this.interest = interest;     }      @override     public string tostring(){         return festivalnumber + "," + interest;     } } 

this servlet-context.xml.

<?xml version="1.0" encoding="utf-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc"     xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:beans="http://www.springframework.org/schema/beans"     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"     xsi:schemalocation="http://www.springframework.org/schema/mvc     http://www.springframework.org/schema/mvc/spring-mvc.xsd         http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context.xsd         http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx.xsd">     <!-- dispatcherservlet context: defines servlet's request-processing          infrastructure -->      <!-- enables spring mvc @controller programming model -->     <annotation-driven />      <!-- handles http requests /resources/** efficiently serving          static resources in ${webapproot}/resources directory -->     <resources mapping="/resources/**" location="/resources/" />      <!-- resolves views selected rendering @controllers .jsp resources          in /web-inf/views directory -->     <beans:bean         class="org.springframework.web.servlet.view.internalresourceviewresolver">         <beans:property name="prefix" value="/web-inf/views/" />         <beans:property name="suffix" value=".jsp" />     </beans:bean>      <beans:bean         class="org.springframework.web.servlet.view.contentnegotiatingviewresolver">         <beans:property name="favorpathextension" value="true" />         <beans:property name="ignoreacceptheader" value="true" />          <beans:property name="mediatypes">             <beans:map>                 <beans:entry key="json" value="application/json" />                 <beans:entry key="html" value="text/html" />             </beans:map>         </beans:property>     </beans:bean>      <context:component-scan base-package="kr.ac.jbnu.jinggumdari" />      <beans:bean         class="org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor" />      <beans:bean id="datasource" class="org.apache.commons.dbcp.basicdatasource"         destroy-method="close">         <beans:property name="driverclassname" value="com.mysql.jdbc.driver" />         <beans:property name="url"             value="jdbc:mysql://localhost:3306/jinggumdari" />         <beans:property name="username" value="root" />         <beans:property name="password" value="mysql1234" />     </beans:bean>      <!-- hibernate 4 sessionfactory bean definition -->     <beans:bean id="hibernate4annotatedsessionfactory"         class="org.springframework.orm.hibernate4.localsessionfactorybean">         <beans:property name="datasource" ref="datasource" />         <beans:property name="annotatedclasses">             <beans:list>                 <beans:value>kr.ac.jbnu.jinggumdari.model.member</beans:value>                 <beans:value>kr.ac.jbnu.jinggumdari.model.festival</beans:value>                 <beans:value>kr.ac.jbnu.jinggumdari.model.festivalimage</beans:value>                 <beans:value>kr.ac.jbnu.jinggumdari.model.interest</beans:value>             </beans:list>         </beans:property>         <beans:property name="hibernateproperties">             <beans:props>                 <beans:prop key="hibernate.dialect">org.hibernate.dialect.mysqldialect                 </beans:prop>                 <beans:prop key="hibernate.show_sql">true</beans:prop>             </beans:props>         </beans:property>         <beans:property name="packagestoscan" value="com.hibernate.yourpackage" />     </beans:bean>      <beans:bean id="memberdao" class="kr.ac.jbnu.jinggumdari.dao.memberdaoimpl">         <beans:property name="sessionfactory"             ref="hibernate4annotatedsessionfactory" />     </beans:bean>     <beans:bean id="memberservice"         class="kr.ac.jbnu.jinggumdari.serviceimplementation.memberserviceimpl">         <beans:property name="memberdao" ref="memberdao"></beans:property>     </beans:bean>      <beans:bean id="festivaldao" class="kr.ac.jbnu.jinggumdari.dao.festivaldaoimpl">         <beans:property name="sessionfactory"             ref="hibernate4annotatedsessionfactory" />     </beans:bean>     <beans:bean id="festivalservice"         class="kr.ac.jbnu.jinggumdari.serviceimplementation.festivalserviceimpl">         <beans:property name="festivaldao" ref="festivaldao"></beans:property>     </beans:bean>      <beans:bean id="festivalimagedao" class="kr.ac.jbnu.jinggumdari.dao.festivalimagedaoimpl">         <beans:property name="sessionfactory"             ref="hibernate4annotatedsessionfactory" />     </beans:bean>     <beans:bean id="festivalimageservice"         class="kr.ac.jbnu.jinggumdari.serviceimplementation.festivalimageserviceimpl">         <beans:property name="festivalimagedao" ref="festivalimagedao"></beans:property>     </beans:bean>      <beans:bean id="interestdao" class="kr.ac.jbnu.jinggumdari.dao.interestdaoimpl">         <beans:property name="sessionfactory"             ref="hibernate4annotatedsessionfactory" />     </beans:bean>     <beans:bean id="interestservice"         class="kr.ac.jbnu.jinggumdari.serviceimplementation.interestserviceimpl">         <beans:property name="interestdao" ref="interestdao"></beans:property>     </beans:bean>      <beans:bean id="reviewdao" class="kr.ac.jbnu.jinggumdari.dao.reviewdaoimpl">         <beans:property name="sessionfactory"             ref="hibernate4annotatedsessionfactory" />     </beans:bean>     <beans:bean id="reviewservice"         class="kr.ac.jbnu.jinggumdari.serviceimplementation.reviewserviceimpl">         <beans:property name="reviewdao" ref="reviewdao"></beans:property>     </beans:bean>      <tx:annotation-driven transaction-manager="transactionmanager" />      <beans:bean id="transactionmanager"         class="org.springframework.orm.hibernate4.hibernatetransactionmanager">         <beans:property name="sessionfactory"             ref="hibernate4annotatedsessionfactory" />     </beans:bean> </beans:beans> 

this dao.

package kr.ac.jbnu.jinggumdari.dao;  import java.util.list;  import kr.ac.jbnu.jinggumdari.model.interest;  import org.hibernate.session; import org.hibernate.sessionfactory; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.transaction.annotation.transactional;  public class interestdaoimpl implements interestdao {     private static final logger logger = loggerfactory             .getlogger(festivaldaoimpl.class);     private sessionfactory sessionfactory;     private boolean issuccess;      public void setsessionfactory(sessionfactory sf) {         this.sessionfactory = sf;     }      @override     @transactional     public boolean addinterest(interest interest) {         // todo auto-generated method stub         issuccess = false;         session session = this.sessionfactory.getcurrentsession();         session.persist(interest);         logger.info("festival saved successfully, festival details=" + interest);         issuccess = true;         return issuccess;     }      @override     @transactional     public boolean modifyinterest(interest interest) {         // todo auto-generated method stub         issuccess = false;         session session = this.sessionfactory.getcurrentsession();         session.update(interest);         logger.info("festival modified successfully, festival details="                 + interest);         issuccess = true;         return issuccess;     }      @override     @transactional     public boolean removeinterests(string festivalnumber) {         // todo auto-generated method stub         issuccess = false;         session session = this.sessionfactory.getcurrentsession();         long numberofinterests = getnumberofinterests(festivalnumber, session);         (int = 0; < numberofinterests; i++) {             interest targetinterest = (interest) session.load(interest.class,                     festivalnumber);             if (targetinterest != null) {                 session.delete(targetinterest);             }             logger.info("interest deleted successfully, interest details="                     + targetinterest);         }         issuccess = true;          return issuccess;     }      @override     @transactional     public list<interest> getinterests(string festivalnumber) {         // todo auto-generated method stub         session session = this.sessionfactory.getcurrentsession();         list<interest> interestslist = session.createquery("from interest")                 .list();         (interest : interestslist) {             logger.info("person list::" + i);         }         return interestslist;     }      @transactional     private long getnumberofinterests(string festivalnumber, session session) {         string hql = "select count(*) interest festival_number='"                 + festivalnumber + "'";         list list = session.createquery(hql).list();         return (long) list.get(0);     } } 

this error stack.

org.hibernate.typemismatchexception: provided id of wrong type class kr.ac.jbnu.jinggumdari.model.interest. expected: class kr.ac.jbnu.jinggumdari.model.interest, got class java.lang.string     @ org.hibernate.event.internal.defaultloadeventlistener.onload(defaultloadeventlistener.java:134)     @ org.hibernate.internal.sessionimpl.fireload(sessionimpl.java:1106)     @ org.hibernate.internal.sessionimpl.access$2000(sessionimpl.java:176)     @ org.hibernate.internal.sessionimpl$identifierloadaccessimpl.getreference(sessionimpl.java:2564)     @ org.hibernate.internal.sessionimpl.load(sessionimpl.java:981)     @ kr.ac.jbnu.jinggumdari.dao.interestdaoimpl.removeinterests(interestdaoimpl.java:56)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source)     @ java.lang.reflect.method.invoke(unknown source)     @ org.springframework.aop.support.aoputils.invokejoinpointusingreflection(aoputils.java:317)     @ org.springframework.aop.framework.reflectivemethodinvocation.invokejoinpoint(reflectivemethodinvocation.java:190)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:157)     @ org.springframework.transaction.interceptor.transactioninterceptor$1.proceedwithinvocation(transactioninterceptor.java:99)     @ org.springframework.transaction.interceptor.transactionaspectsupport.invokewithintransaction(transactionaspectsupport.java:281)     @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:96)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179)     @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:207)     @ com.sun.proxy.$proxy54.removeinterests(unknown source)     @ kr.ac.jbnu.jinggumdari.serviceimplementation.interestserviceimpl.removeinterests(interestserviceimpl.java:31)     @ kr.ac.jbnu.jinggumdari.controller.jinggumdaricontroller.test2(jinggumdaricontroller.java:309)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source)     @ java.lang.reflect.method.invoke(unknown source)     @ org.springframework.web.method.support.invocablehandlermethod.doinvoke(invocablehandlermethod.java:221)     @ org.springframework.web.method.support.invocablehandlermethod.invokeforrequest(invocablehandlermethod.java:137)     @ org.springframework.web.servlet.mvc.method.annotation.servletinvocablehandlermethod.invokeandhandle(servletinvocablehandlermethod.java:110)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.invokehandlemethod(requestmappinghandleradapter.java:777)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.handleinternal(requestmappinghandleradapter.java:706)     @ org.springframework.web.servlet.mvc.method.abstracthandlermethodadapter.handle(abstracthandlermethodadapter.java:85)     @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:943)     @ org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:877)     @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:966)     @ org.springframework.web.servlet.frameworkservlet.doget(frameworkservlet.java:857)     @ javax.servlet.http.httpservlet.service(httpservlet.java:624)     @ org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:842)     @ javax.servlet.http.httpservlet.service(httpservlet.java:731)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:303)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:208)     @ org.apache.tomcat.websocket.server.wsfilter.dofilter(wsfilter.java:52)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:241)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:208)     @ org.springframework.web.filter.characterencodingfilter.dofilterinternal(characterencodingfilter.java:88)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:241)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:208)     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:220)     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:122)     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:505)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:170)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:103)     @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:950)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:116)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:423)     @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1079)     @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:620)     @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:318)     @ java.util.concurrent.threadpoolexecutor.runworker(unknown source)     @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source)     @ org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61)     @ java.lang.thread.run(unknown source) 

your problem using 2 @id annotations in same entity, rather use @embeddeid instead, change code:

@id @column(name="interest") private string interest;  @id @column(name="festival_number", unique=true, nullable=false) @generatedvalue(generator="gen") @genericgenerator(name="gen", strategy="foreign", parameters=@parameter(name="property", value="festival_info")) private string festivalnumber;  

to following code:

public class interest implements serializable{     @embeddedid    private interestid id;    //getters , setters , rest of code go here  } 

and interestid class:

@embeddable public class person implements serializable {     private static final long serialversionuid = 1l;      @column(name="interest")     private string interest;      @column(name="festival_number", unique=true, nullable=false)     @generatedvalue(generator="gen")     @genericgenerator(name="gen", strategy="foreign", parameters=@parameter(name="property", value="festival_info"))     private string festivalnumber;       // , getters , setters here } 

you can refer this tutorial , documentation here further information.


Comments