Hibernate - org.hibernate.hql.internal.ast.QuerySyntaxException:未映射客户端

时间:2015-11-13 13:59:54

标签: java hibernate

我刚开始休眠,我正试图解决一些我无法理解的问题......

例如,我有这个查询

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>

DB上的表名为client,列为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文件中正确...

提前致谢

1 个答案:

答案 0 :(得分:5)

尝试在查询中添加该类的全名:

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">