2013-05-04 3 views
0

방금 ​​Hibernate를 사용하여 개발을 시작했으며 테이블에서 열을 선택하는 동안 문제가 발생했습니다. 나는 "nome"이라는 컬럼이있는 테이블을 가지고 있으며 그것은 String입니다. 내가하고 싶은 것은 테이블에서이 열의 모든 값을 가져 오는 것입니다. 이를 위해 나는 방법 만든이 경우최대 절전 모드를 사용하여 단 하나의 열 값을 얻는 방법

public List<String> obtemNomePorQuery(String query) { 

     EntityManager manager = getEntityManager(); 

     Session session = manager.unwrap(Session.class);  

     List<String> listResult = (List<String>) session.createQuery(query).list(); 
     manager.close(); 

     return listResult; 
    } 

을, 나는 쿼리 매개 변수에 "년 Lojas에서 놈을 선택"통과하고있다. MySQL에서이 쿼리를 실행할 수 있으며 원하는 모든 것을 반환합니다. Hibernate를 사용하면 다음과 같은 로그를 얻을 수 있습니다 :

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.hql.internal.ast.QuerySyntaxException: lojas is not mapped [select nome from lojas] 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
root cause 

org.hibernate.hql.internal.ast.QuerySyntaxException: lojas is not mapped [select nome from lojas] 
    org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) 
    org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) 
    org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93) 
    org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:326) 
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3252) 
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3141) 
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:694) 
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:550) 
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:287) 
    org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:235) 
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248) 
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183) 
    org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:119) 
    org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:214) 
    org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:192) 
    org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1537) 
    com.puccamp.projetofinal.persistence.Dao.obtemNomePorQuery(Dao.java:198) 
    com.puccamp.projetofinal.controller.LojaController.gerenciaLoja(LojaController.java:63) 
    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.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

무엇을 잘못하고있을 수 있습니까?

답변

1

사용중인 방법은 SQL이 아닌 HQL을 기다리고 있습니다. lojas 테이블과 연결된 영구 객체가 있습니까? 그렇지 않으면 HQL은 당신을위한 옵션이 아니며 대신 SQL을 실행하기 위해 데이터베이스에 대한 네이티브 연결을 가져와야합니다. createSQLQuery(String queryString) 방법을 Session으로 시도 했습니까? 다음은 javadoc입니다. http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/Session.html

+0

감사합니다. 방금 createSQLQuery 메서드를 사용하여 예상대로 작업했습니다! –

관련 문제