2015-11-13 30 views
0

我是新來的休眠和我試圖解決一些問題,我無法理解太清楚......休眠 - org.hibernate.hql.internal.ast.QuerySyntaxException:客戶不映射

例如,我有這個疑問

Query query = session.createQuery("from Client where clientId = "+clientId+")"); 
List result = query.list(); 

我Client.hbm.xml是

<class name="it.besmart.models.Client" table="client" catalog="SMARTPARK"> 
     <id name="idClient" type="int"> 
      <column name="id_client" /> 
      <generator class="identity" /> 
     </id> 
     <property name="nomeClient" type="string"> 
      <column name="nome_client" length="65535" not-null="true" /> 
     </property> 
     <property name="numPosti" type="int"> 
      <column name="num_posti" not-null="true" /> 
     </property> 
     <property name="numLuci" type="int"> 
      <column name="num_luci" not-null="true" /> 
     </property> 
     <property name="inizioPosti" type="int"> 
      <column name="inizio_posti" not-null="true" /> 
     </property> 
     <property name="inizioLuci" type="int"> 
      <column name="inizio_luci" not-null="true" /> 
     </property> 
    </class> 
</hibernate-mapping> 

在數據庫的表稱爲客戶端和列CLIENT_ID

hibernate.cfg.xml中的映射

<hibernate-configuration> 
<session-factory name="parkserver"> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.password">passwprd</property> 
    <property name="hibernate.connection.url">jdbc:mysql://192.168.3.67:3306/SMARTPARK</property> 
    <property name="hibernate.connection.username">parkuser</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="show_sql">true</property> 
    <property name="format_sql">true</property> 
    <mapping class="it.besmart.models.Client" resource="Client.hbm.xml"/> 
    <mapping class="it.besmart.models.Illuminazione" resource="Illuminazione.hbm.xml"/> 
    <mapping class="it.besmart.models.MappaPosti" resource="MappaPosti.hbm.xml"/> 
    <mapping class="it.besmart.models.Occupazione" resource="Occupazione.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

我有在申請另一個查詢沒有問題,但是當我嘗試執行器的SELECT查詢我得到這個例外

org.hibernate.hql.internal.ast.QuerySyntaxException: Client is not mapped [from Client where clientId = 1)] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79) 
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150) 
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:298) 
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) 
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836) 
    at it.besmart.parkserver.SocketClientHandler.run(SocketClientHandler.java:83) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Client is not mapped 
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171) 
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91) 
    at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:76) 
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3678) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190) 

我不知道爲什麼客戶端沒有映射,這是正確的CFG文件...

在此先感謝

回答

5

嘗試添加CL的全名屁股查詢:

Query query = session.createQuery("from it.besmart.models.Client where clientId = :c"); 
query.setString("c", clientId) 
List result = query.list(); 

我也改變了這裏後期綁定是首選的,但已經無關,與你的問題。

正如莫里斯·佩裏在下面的評論中指出: - 您也可以在映射文件中指定默認包:<hibernate-mapping package="it.besmart.models">

+0

謝謝!這解決了我的問題!我瘋狂地使用了實體和cfg的路徑和名稱...... – besmart

+1

您也可以在映射文件中指定默認包: