java - Hibernate - org.hibernate.hql.internal.ast.QuerySyntaxException : Client is not mapped

标签 java hibernate

我是 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>

数据库上的表称为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文件中是正确的...

提前致谢

最佳答案

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

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

我还在这里更改为后期绑定(bind),这是更好的选择,但与您的问题无关。

正如莫里斯·佩里 (Maurice Perry) 在下面的评论中指出的那样: - 您还可以在映射文件中指定默认包:<hibernate-mapping package="it.besmart.models">

关于java - Hibernate - org.hibernate.hql.internal.ast.QuerySyntaxException : Client is not mapped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33694438/

相关文章:

java - 私有(private)实例方法在运行时不受限制吗?

Java通过连续流而不是文件来解析XML

java - Hibernate:如何连接表与不是外键的列

java - 不能做二级缓存

java - 如何将 jodaTime 与 hibernate 一起使用

java - JPA、 hibernate 、Java。复合主键,其中之一也是外键

java - JPA/Hibernate 具有共享主键的单向一对一映射

java - 网络适​​配器无法建立连接

java - 不同包中源文件的 Android ClassNotFoundException

java - 使用 throws 子句混淆方法