jpa - Alternative namedquery for nativequery -
i need change query native-query (named-query or create-query) in jpa.
em = getentitymanager(); string query = "select kcu.table_name information_schema.key_column_usage kcu,information_schema.tables kt " + "where kcu.referenced_table_name = 'sampletable1' " + "and kcu.table_schema='sampledatabase' " + "and kcu.referenced_column_name = 'samplerollnoid' " + "and kt.table_name = kcu.table_name " + "and kt.table_rows > 0 " + "and kt.table_schema = kcu.table_schema"; list tablenamelist = (list) em.createnativequery(query).getresultlist(); this query returns tablenames (the tables names foreign key refer table (sampletable1)).
i got error when change createquery or namedquery.
like
list tablenamelist = (list) em.createquery(query).getresultlist(); or list tablenamelist = (list) em.createnamedquery(query).getresultlist(); how change query namedquery or createquery. possible?
the following error, when use createquery
------------- standard error ----------------- log4j:warn no appenders found logger (org.springframework.test.context.junit4.springjunit4classrunner). log4j:warn please initialize log4j system properly. testcase: testentryinusenamedquery(com.jpasampledaotest): caused error org.hibernate.hql.ast.querysyntaxexception: information_schema.key_column_usage not mapped [select kcu.table_name information_schema.key_column_usage kcu,information_schema.tables kt kcu.referenced_table_name = 'sampletable1' , kcu.table_schema='sampledatabase' , kcu.referenced_column_name = 'samplerollnoid' , kt.table_name = kcu.table_name , kt.table_rows > 0 , kt.table_schema = kcu.table_schema] java.lang.illegalargumentexception: org.hibernate.hql.ast.querysyntaxexception: information_schema.key_column_usage not mapped [select kcu.table_name information_schema.key_column_usage kcu,information_schema.tables kt kcu.referenced_table_name = 'sampletable1' , kcu.table_schema='sampledatabase' , kcu.referenced_column_name = 'samplerollnoid' , kt.table_name = kcu.table_name , kt.table_rows > 0 , kt.table_schema = kcu.table_schema] @ org.hibernate.ejb.abstractentitymanagerimpl.throwpersistenceexception(abstractentitymanagerimpl.java:624) @ org.hibernate.ejb.abstractentitymanagerimpl.createquery(abstractentitymanagerimpl.java:96) @ org.springframework.orm.jpa.sharedentitymanagercreator$sharedentitymanagerinvocationhandler.invoke(sharedentitymanagercreator.java:193) @ $proxy27.createquery(unknown source) @ org.springframework.test.context.junit4.springtestmethod.invoke(springtestmethod.java:198) @ org.springframework.test.context.junit4.springmethodroadie.runtestmethod(springmethodroadie.java:274) @ org.springframework.test.context.junit4.springmethodroadie$2.run(springmethodroadie.java:207) @ org.springframework.test.context.junit4.springmethodroadie.runbeforesthentestthenafters(springmethodroadie.java:254) @ org.springframework.test.context.junit4.springmethodroadie.runwithrepetitions(springmethodroadie.java:234) @ org.springframework.test.context.junit4.springmethodroadie.runtest(springmethodroadie.java:204) @ org.springframework.test.context.junit4.springmethodroadie.run(springmethodroadie.java:146) @ org.springframework.test.context.junit4.springjunit4classrunner.invoketestmethod(springjunit4classrunner.java:151) caused by: org.hibernate.hql.ast.querysyntaxexception: information_schema.key_column_usage not mapped [select kcu.table_name information_schema.key_column_usage kcu,information_schema.tables kt kcu.referenced_table_name = 'sampletable1' , kcu.table_schema='sampledatabase' , kcu.referenced_column_name = 'samplerollnoid' , kt.table_name = kcu.table_name , kt.table_rows > 0 , kt.table_schema = kcu.table_schema] @ org.hibernate.hql.ast.util.sessionfactoryhelper.requireclasspersister(sessionfactoryhelper.java:158) @ org.hibernate.hql.ast.tree.fromelementfactory.addfromelement(fromelementfactory.java:87) @ org.hibernate.hql.ast.tree.fromclause.addfromelement(fromclause.java:70) @ org.hibernate.hql.ast.hqlsqlwalker.createfromelement(hqlsqlwalker.java:255) @ org.hibernate.hql.antlr.hqlsqlbasewalker.fromelement(hqlsqlbasewalker.java:3056) @ org.hibernate.hql.antlr.hqlsqlbasewalker.fromelementlist(hqlsqlbasewalker.java:2945) @ org.hibernate.hql.antlr.hqlsqlbasewalker.fromclause(hqlsqlbasewalker.java:688) @ org.hibernate.hql.antlr.hqlsqlbasewalker.query(hqlsqlbasewalker.java:544) @ org.hibernate.hql.antlr.hqlsqlbasewalker.selectstatement(hqlsqlbasewalker.java:281) @ org.hibernate.hql.antlr.hqlsqlbasewalker.statement(hqlsqlbasewalker.java:229) @ org.hibernate.hql.ast.querytranslatorimpl.analyze(querytranslatorimpl.java:228) @ org.hibernate.hql.ast.querytranslatorimpl.docompile(querytranslatorimpl.java:160) @ org.hibernate.hql.ast.querytranslatorimpl.compile(querytranslatorimpl.java:111) @ org.hibernate.engine.query.hqlqueryplan.<init>(hqlqueryplan.java:77) @ org.hibernate.engine.query.hqlqueryplan.<init>(hqlqueryplan.java:56) @ org.hibernate.engine.query.queryplancache.gethqlqueryplan(queryplancache.java:72) @ org.hibernate.impl.abstractsessionimpl.gethqlqueryplan(abstractsessionimpl.java:133) @ org.hibernate.impl.abstractsessionimpl.createquery(abstractsessionimpl.java:112) @ org.hibernate.impl.sessionimpl.createquery(sessionimpl.java:1623) @ org.hibernate.ejb.abstractentitymanagerimpl.createquery(abstractentitymanagerimpl.java:93) help me, in advance.
use jpql on sql. in jpql refer entities rather tables , properties rather columns.
use em.createquery() execute jpql query. em.createnamedquery() different purposes.
Comments
Post a Comment