2014-12-06 1 views
0

연결하려는 사용자가 있는지 확인하려고한다.Hibernate에서 Count 문이 작동하지 않는다.

Integer count = ((Long)session.createQuery("select count(*) from bi_membres where login = '" + 
       this.login + "' and motPasse = '" + this.motPasse + "'").uniqueResult()).intValue(); 

나는 SQLGrammarException: could not extract ResultSet 오류를 받고 있어요 : 그 동안, 난 작동하지 않는 카운트 SQL 문을 사용합니다. 이 예에서는 'art'라는 암호를 'ar'으로 연결하려고합니다.

스택 추적

org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82) 
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61) 
at org.hibernate.loader.Loader.getResultSet(Loader.java:2040) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1837) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816) 
at org.hibernate.loader.Loader.doQuery(Loader.java:900) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) 
at org.hibernate.loader.Loader.doList(Loader.java:2526) 
at org.hibernate.loader.Loader.doList(Loader.java:2512) 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342) 
at org.hibernate.loader.Loader.list(Loader.java:2337) 
at org.hibernate.hql.internal.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:942) 
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195) 
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1269) 
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 
at org.hibernate.internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:909) 
at com.deptinfo.beans.ConnexionBean.verifierConnexion(ConnexionBean.java:56) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at javax.el.ELUtil.invokeMethod(ELUtil.java:326) 
at javax.el.BeanELResolver.invoke(BeanELResolver.java:536) 
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:136) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:204) 
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) 
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) 
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
at javax.faces.component.UIOutput.getValue(UIOutput.java:174) 
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) 
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) 
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) 
at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443) 
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
at java.lang.Thread.run(Unknown Source) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where (login='art')and(motPasse='ar')' at line 1 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) 
at com.mysql.jdbc.Util.getInstance(Util.java:360) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2030) 
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56) 
여기

내 관심을 끌었 라인이있다 :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where (login='art')and(motPasse='ar')' at line 1 

이상한 부분은 내가 로컬 호스트에서 (괄호) 같은 쿼리를 시도하고 잘 작동한다는 것입니다 .

Bi_membres 테이블 매핑의 conf (간체) 그런데

<hibernate-mapping> 
    <class name="com.deptinfo.classes.BiMembres" table="bi_membres" catalog="bibli" optimistic-lock="version"> 
    <property name="login" type="string"> 
     <column name="Login" length="20" not-null="true" /> 
    </property> 
    <property name="motPasse" type="string"> 
     <column name="MotPasse" length="10" not-null="true" /> 
    </property> 
    </class> 
</hibernate-mapping> 

은 암호가 암호화되지 않은 과제의 일부 신경 쓰지 않는다.

누구에게 무슨 문제가 있을지 알고 있습니다.

편집

나는 그것을 하나의 준비를하기 위해 내 쿼리를 변경 :

String hqlNbMembres = "select count(*) from Bi_membres membre where membre.login=:login and membre.motPasse=:motPasse"; 
Integer count = ((Long)session.createQuery(hqlNbMembres).setString("login", this.login).setString("motPasse", this.motPasse).uniqueResult()).intValue(); 

을하지만 지금은이 오류 받고 있어요 :

QueryException: in expected: membre [select count(*) from Bi_membres membre where membre.login=:login and membre.motPasse=:motPasse] 

어떤 힌트를?

+1

** 준비된 쿼리 **를 사용하십시오. 수작업으로 쿼리를 작성하는 것은 ** 매우 위험 할뿐만 아니라 오류가 발생하기 쉽습니다. –

+0

좋아, 나는별로 변하지 않을 것이라고 생각했지만 시도해 보겠다. – TheWanderingMind

+0

또한 [RTFM] (http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-aggregation). 수동 변수 대체 이외의 다른 이유 때문에 유효하지 않은 HQL입니다. –

답변

1

나는 프로젝션을 사용할 것을 제안합니다.

Criteria crit=session.createCriteria(BiMembres.class); 
     crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
     crit.add(Restrictions.eq("login", this.login)); 
     ... OTHER Criterias if any.. 
     //set the count projection 
     crit.setProjection(Projections.rowCount()) 
    Long rowsCount = (Long)crit.uniqueResult(); 
관련 문제