spring - JPA Entity mapping causing data type conversion error -


i have 2 tables. 1 represents questions, , other represents possible answers. in real world application display question answers show either radio values, select box, or checkbox.

i've created jpa entities both tables @onetomany mapping on questions entity , @manytoone mapping on answers side joined composite foreign key.

when have application search particular questions, there error when initializing set of possible answers in questions object.

when scroll down error stack, brings conversion error (converting nvarchar int) can't seem wrap head around since 'subtask' property string in entity classes , varchar in database(sql server 2008) tables.

i've looked @ hibernate documentation , tried different combinations of annotations possible relationship keep getting same error.

can on code see there flaw? going crazy?

dao code:

public list<subtaskquestion> getsubtaskquestions(string company,         string subtask) {     return entitymanager             .createquery("select s subtaskquestion s company = :company , subtask = :subtask", subtaskquestion.class)             .setparameter("company", company)             .setparameter("subtask", subtask)             .getresultlist();" } 

entity classes:

@entity @idclass(subtaskquestionkey.class) @table(name="m_subtask_qs") public class subtaskquestion implements comparable<subtaskquestion> {     @id     @column(name="company")     private string company;     @id     @column(name="subtaskid")     private string subtask;     @id     @column(name="q_seq")     private integer qseq;     @column(name="question")     private string question;     @column(name="answer_type")     private string answertype;     @column(name="required")     private boolean required;      @onetomany(fetch=fetchtype.eager, cascade=cascadetype.all)     @joincolumns({         @joincolumn(name="company", insertable=false, updatable=false),         @joincolumn(name="subtaskid", insertable=false, updatable=false),         @joincolumn(name="q_seq", insertable=false, updatable=false)     })     @orderby("v_seq")     private sortedset<subtaskquestionanswer> possibleanswers;      ...   @entity @idclass(subtaskquestionanswerkey.class) @table(name="m_subtask_qs_values") public class subtaskquestionanswer implements comparable<subtaskquestionanswer> {      @id     @column(name="company")     private string company;     @id     @column(name="subtaskid")     private string subtask;     @id     @column(name="q_seq")     private integer qseq;     @id     @column(name="v_seq")     private integer vseq;     @column(name="answer_type")     private string answertype;     @column(name="value")     private string value;     @manytoone     @joincolumns({         @joincolumn(name="company", insertable=false, updatable=false),         @joincolumn(name="subtaskid", insertable=false, updatable=false),         @joincolumn(name="q_seq", insertable=false, updatable=false)     })     private subtaskquestion subtaskquestion;      ... 

actual error message:

javax.persistence.persistenceexception: org.hibernate.exception.sqlgrammarexception: not initialize collection: [com.questionanswer.pojo.subtask.subtaskquestion.possibleanswers#component[company,qseq,subtask]{company=c310, qseq=4, subtask=cs0100}]     @ org.hibernate.jpa.spi.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1692)     @ org.hibernate.jpa.spi.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1602)     @ org.hibernate.jpa.internal.queryimpl.getresultlist(queryimpl.java:492)     @ com.questionanswer.repository.subtaskdaoimpl.getsubtaskquestions(subtaskdaoimpl.java:76)     @ com.questionanswer.service.subtaskserviceimpl.getpendingheaderdata(subtaskserviceimpl.java:54)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:498)     @ org.springframework.aop.support.aoputils.invokejoinpointusingreflection(aoputils.java:317)     @ org.springframework.aop.framework.reflectivemethodinvocation.invokejoinpoint(reflectivemethodinvocation.java:183)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:150)     @ org.springframework.aop.aspectj.aspectjafterthrowingadvice.invoke(aspectjafterthrowingadvice.java:55)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172)     @ org.springframework.transaction.interceptor.transactioninterceptor$1.proceedwithinvocation(transactioninterceptor.java:96)     @ org.springframework.transaction.interceptor.transactionaspectsupport.invokewithintransaction(transactionaspectsupport.java:260)     @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:94)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172)     @ org.springframework.aop.interceptor.exposeinvocationinterceptor.invoke(exposeinvocationinterceptor.java:91)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172)     @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:204)     @ com.sun.proxy.$proxy784.getpendingheaderdata(unknown source)     @ com.questionanswer.controller.subtaskcontroller.subtaskcaseid(subtaskcontroller.java:82)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:498)     @ org.springframework.web.method.support.invocablehandlermethod.invoke(invocablehandlermethod.java:215)     @ org.springframework.web.method.support.invocablehandlermethod.invokeforrequest(invocablehandlermethod.java:132)     @ org.springframework.web.servlet.mvc.method.annotation.servletinvocablehandlermethod.invokeandhandle(servletinvocablehandlermethod.java:104)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.invokehandlemethod(requestmappinghandleradapter.java:743)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.handleinternal(requestmappinghandleradapter.java:672)     @ org.springframework.web.servlet.mvc.method.abstracthandlermethodadapter.handle(abstracthandlermethodadapter.java:82)     @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:933)     @ org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:867)     @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:953)     @ org.springframework.web.servlet.frameworkservlet.doget(frameworkservlet.java:844)     @ javax.servlet.http.httpservlet.service(httpservlet.java:621)     @ org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:829)     @ javax.servlet.http.httpservlet.service(httpservlet.java:728)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:305)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)     @ org.apache.tomcat.websocket.server.wsfilter.dofilter(wsfilter.java:51)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.access.intercept.filtersecurityinterceptor.invoke(filtersecurityinterceptor.java:118)     @ org.springframework.security.web.access.intercept.filtersecurityinterceptor.dofilter(filtersecurityinterceptor.java:84)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.access.exceptiontranslationfilter.dofilter(exceptiontranslationfilter.java:113)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.session.sessionmanagementfilter.dofilter(sessionmanagementfilter.java:103)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.authentication.anonymousauthenticationfilter.dofilter(anonymousauthenticationfilter.java:113)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.servletapi.securitycontextholderawarerequestfilter.dofilter(securitycontextholderawarerequestfilter.java:154)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.savedrequest.requestcacheawarefilter.dofilter(requestcacheawarefilter.java:45)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.authentication.abstractauthenticationprocessingfilter.dofilter(abstractauthenticationprocessingfilter.java:199)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.authentication.logout.logoutfilter.dofilter(logoutfilter.java:110)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.csrf.csrffilter.dofilterinternal(csrffilter.java:85)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:106)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.context.securitycontextpersistencefilter.dofilter(securitycontextpersistencefilter.java:87)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.context.request.async.webasyncmanagerintegrationfilter.dofilterinternal(webasyncmanagerintegrationfilter.java:50)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:106)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.filterchainproxy.dofilterinternal(filterchainproxy.java:192)     @ org.springframework.security.web.filterchainproxy.dofilter(filterchainproxy.java:160)     @ org.springframework.web.filter.delegatingfilterproxy.invokedelegate(delegatingfilterproxy.java:343)     @ org.springframework.web.filter.delegatingfilterproxy.dofilter(delegatingfilterproxy.java:260)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)     @ org.springframework.web.multipart.support.multipartfilter.dofilterinternal(multipartfilter.java:118)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:106)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:222)     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:123)     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:502)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:171)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:100)     @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:953)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:408)     @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1041)     @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:603)     @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:310)     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1142)     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:617)     @ java.lang.thread.run(thread.java:745) caused by: org.hibernate.exception.sqlgrammarexception: not initialize collection: [com.questionanswer.pojo.subtask.subtaskquestion.possibleanswers#component[company,qseq,subtask]{company=c310, qseq=4, subtask=cs0100}]     @ org.hibernate.exception.internal.sqlstateconversiondelegate.convert(sqlstateconversiondelegate.java:106)     @ org.hibernate.exception.internal.standardsqlexceptionconverter.convert(standardsqlexceptionconverter.java:42)     @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:111)     @ org.hibernate.loader.collection.plan.abstractloadplanbasedcollectioninitializer.initialize(abstractloadplanbasedcollectioninitializer.java:98)     @ org.hibernate.persister.collection.abstractcollectionpersister.initialize(abstractcollectionpersister.java:682)     @ org.hibernate.event.internal.defaultinitializecollectioneventlistener.oninitializecollection(defaultinitializecollectioneventlistener.java:75)     @ org.hibernate.internal.sessionimpl.initializecollection(sessionimpl.java:2004)     @ org.hibernate.collection.internal.abstractpersistentcollection.forceinitialization(abstractpersistentcollection.java:730)     @ org.hibernate.engine.internal.statefulpersistencecontext.initializenonlazycollections(statefulpersistencecontext.java:918)     @ org.hibernate.loader.loader.doqueryandinitializenonlazycollections(loader.java:341)     @ org.hibernate.loader.loader.dolist(loader.java:2610)     @ org.hibernate.loader.loader.dolist(loader.java:2593)     @ org.hibernate.loader.loader.listignorequerycache(loader.java:2422)     @ org.hibernate.loader.loader.list(loader.java:2417)     @ org.hibernate.loader.hql.queryloader.list(queryloader.java:501)     @ org.hibernate.hql.internal.ast.querytranslatorimpl.list(querytranslatorimpl.java:371)     @ org.hibernate.engine.query.spi.hqlqueryplan.performlist(hqlqueryplan.java:216)     @ org.hibernate.internal.sessionimpl.list(sessionimpl.java:1339)     @ org.hibernate.internal.queryimpl.list(queryimpl.java:87)     @ org.hibernate.jpa.internal.queryimpl.list(queryimpl.java:606)     @ org.hibernate.jpa.internal.queryimpl.getresultlist(queryimpl.java:483)     ... 92 more caused by: com.microsoft.sqlserver.jdbc.sqlserverexception: conversion failed when converting nvarchar value 'cs0100' data type int.     @ com.microsoft.sqlserver.jdbc.sqlserverexception.makefromdatabaseerror(sqlserverexception.java:216)     @ com.microsoft.sqlserver.jdbc.sqlserverresultset$fetchbuffer.nextrow(sqlserverresultset.java:4853)     @ com.microsoft.sqlserver.jdbc.sqlserverresultset.fetchbuffernext(sqlserverresultset.java:1781)     @ com.microsoft.sqlserver.jdbc.sqlserverresultset.next(sqlserverresultset.java:1034)     @ org.apache.commons.dbcp.delegatingresultset.next(delegatingresultset.java:207)     @ org.apache.commons.dbcp.delegatingresultset.next(delegatingresultset.java:207)     @ org.hibernate.loader.plan.exec.process.internal.resultsetprocessorimpl.extractresults(resultsetprocessorimpl.java:109)     @ org.hibernate.loader.plan.exec.internal.abstractloadplanbasedloader.executeload(abstractloadplanbasedloader.java:122)     @ org.hibernate.loader.plan.exec.internal.abstractloadplanbasedloader.executeload(abstractloadplanbasedloader.java:86)     @ org.hibernate.loader.collection.plan.abstractloadplanbasedcollectioninitializer.initialize(abstractloadplanbasedcollectioninitializer.java:88)     ... 109 more 

so after trying out few things, realized hibernate matching wrong columns when doing join composite keys. , in doing tried match q_seq column question table subtaskid column in answer table. had explicitly match each join column appropriate column question table using referencedcolumnname attribute in annotation. pretty renamed database table columns in answer table (added "_fk" fk column names) didn't confuse myself referencing what.

@onetomany(fetch=fetchtype.eager, cascade=cascadetype.all)     @joincolumns({         @joincolumn(name="company_fk", referencedcolumnname="company", insertable=false, updatable=false),         @joincolumn(name="subtaskid_fk", referencedcolumnname="subtaskid", insertable=false, updatable=false),         @joincolumn(name="q_seq_fk", referencedcolumnname="q_seq", insertable=false, updatable=false)     })     @orderby("v_seq")     private sortedset<subtaskquestionanswer> possibleanswers; 

Comments