java - SQLGrammarException for a table with embeddable primary key -
i created 2 tables, bank , branches.
i created dao/bo classes , interfaces both pojo.
i mapped them using annotations.
i'm using hibernate , spring.
i tested findall method on bank table...
public list<bank> findall() { return gethibernatetemplate().find("from bank"); } ...and successful.
the id of bank table, consists - alongside id of branch table - primary key of branch table.
so made embeddable class :
@embeddable public class branchpk implements serializable { /** * */ private static final long serialversionuid = -8721469933759558600l; private integer brchnum; private integer banknum; public branchpk() { } @column(name="brchnum", precision=3, scale=0) public integer getbrchnum() { return this.brchnum; } @column(name="banknum", precision=3, scale=0) public integer getbanknum() { return this.banknum; } public void setbrchnum(integer brchnum) { this.brchnum = brchnum; } public void setbanknum(integer banknum) { this.banknum = banknum; } } the branch table represented :
@entity @table(name="branch") public class branch implements serializable { /** * */ private static final long serialversionuid = 9075916046034338274l; @embeddedid private branchpk primarykey; @manytoone(fetch=fetchtype.lazy) @joincolumn(name="banknum") private bank bank; ......... everything seems , in order, when repeat previous findall method fetch branches
public list<branch> findall() { return gethibernatetemplate().find("from branch"); } i received error:
could not execute query; nested exception org.hibernate.exception.sqlgrammarexception: not execute query
update
tests run: 2, failures: 0, errors: 1, skipped: 0, time elapsed: 1.612 sec <<< failure! testfinddall(bdl.cdr.core.bankbankdaotest) time elapsed: 0.19 sec <<< error! org.springframework.dao.invaliddataaccessresourceusageexception: not execute query; nested exception org.hibernate.exception.sqlgrammarexception: not execute query @ org.springframework.orm.hibernate3.sessionfactoryutils.converthibernateaccessexception(sessionfactoryutils.java:630) @ org.springframework.orm.hibernate3.hibernateaccessor.converthibernateaccessexception(hibernateaccessor.java:412) @ org.springframework.orm.hibernate3.hibernatetemplate.doexecute(hibernatetemplate.java:424) @ org.springframework.orm.hibernate3.hibernatetemplate.executewithnativesession(hibernatetemplate.java:374) @ org.springframework.orm.hibernate3.hibernatetemplate.find(hibernatetemplate.java:921) @ org.springframework.orm.hibernate3.hibernatetemplate.find(hibernatetemplate.java:913) @ bdl.cdr.core.dao.impl.bankbranchdaoimpl.findall(bankbranchdaoimpl.java:14) @ bdl.cdr.core.bo.impl.bankbranchboimpl.findall(bankbranchboimpl.java:19) @ bdl.cdr.core.bankbankdaotest.testfinddall(bankbankdaotest.java:26) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ junit.framework.testcase.runtest(testcase.java:176) @ junit.framework.testcase.runbare(testcase.java:141) @ junit.framework.testresult$1.protect(testresult.java:122) @ junit.framework.testresult.runprotected(testresult.java:142) @ junit.framework.testresult.run(testresult.java:125) @ junit.framework.testcase.run(testcase.java:129) @ junit.framework.testsuite.runtest(testsuite.java:255) @ junit.framework.testsuite.run(testsuite.java:250) @ org.junit.internal.runners.junit38classrunner.run(junit38classrunner.java:84) @ org.apache.maven.surefire.junit4.junit4testset.execute(junit4testset.java:53) @ org.apache.maven.surefire.junit4.junit4provider.executetestset(junit4provider.java:123) @ org.apache.maven.surefire.junit4.junit4provider.invoke(junit4provider.java:104) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ org.apache.maven.surefire.util.reflectionutils.invokemethodwitharray(reflectionutils.java:164) @ org.apache.maven.surefire.booter.providerfactory$providerproxy.invoke(providerfactory.java:110) @ org.apache.maven.surefire.booter.surefirestarter.invokeprovider(surefirestarter.java:175) @ org.apache.maven.surefire.booter.surefirestarter.runsuitesinprocesswhenforked(surefirestarter.java:107) @ org.apache.maven.surefire.booter.forkedbooter.main(forkedbooter.java:68) caused by: org.hibernate.exception.sqlgrammarexception: not execute query @ org.hibernate.exception.sqlstateconverter.convert(sqlstateconverter.java:92) @ org.hibernate.exception.jdbcexceptionhelper.convert(jdbcexceptionhelper.java:66) @ org.hibernate.loader.loader.dolist(loader.java:2545) @ org.hibernate.loader.loader.listignorequerycache(loader.java:2276) @ org.hibernate.loader.loader.list(loader.java:2271) @ org.hibernate.loader.hql.queryloader.list(queryloader.java:459) @ org.hibernate.hql.ast.querytranslatorimpl.list(querytranslatorimpl.java:365) @ org.hibernate.engine.query.hqlqueryplan.performlist(hqlqueryplan.java:196) @ org.hibernate.impl.sessionimpl.list(sessionimpl.java:1268) @ org.hibernate.impl.queryimpl.list(queryimpl.java:102) @ org.springframework.orm.hibernate3.hibernatetemplate$30.doinhibernate(hibernatetemplate.java:930) @ org.springframework.orm.hibernate3.hibernatetemplate.doexecute(hibernatetemplate.java:419) ... 31 more caused by: com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception: unknown column 'bankbranch0_.t_banknum' in 'field list' @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method) @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:57) @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45) @ java.lang.reflect.constructor.newinstance(constructor.java:526) @ com.mysql.jdbc.util.handlenewinstance(util.java:411) @ com.mysql.jdbc.util.getinstance(util.java:386) @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1054) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4237) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4169) @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2617) @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2778) @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2834) @ com.mysql.jdbc.preparedstatement.executeinternal(preparedstatement.java:2156) @ com.mysql.jdbc.preparedstatement.executequery(preparedstatement.java:2313) @ org.hibernate.jdbc.abstractbatcher.getresultset(abstractbatcher.java:208) @ org.hibernate.loader.loader.getresultset(loader.java:1953) @ org.hibernate.loader.loader.doquery(loader.java:802) @ org.hibernate.loader.loader.doqueryandinitializenonlazycollections(loader.java:274) @ org.hibernate.loader.loader.dolist(loader.java:2542) ... 40 more
your error shows unknown column 'bankbranch0_.t_banknum' in 'field list' try find if table has t_banknum column in table. not there, remove mapping pojo.
Comments
Post a Comment