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
Post a Comment