【问题标题】:How to solve org.hibernate.hql.ast.QuerySyntaxException: Exception如何解决 org.hibernate.hql.ast.QuerySyntaxException: Exception
【发布时间】:2014-08-26 06:44:54
【问题描述】:

我想使用休眠查询从数据库中检索单个值,

这是我的 java sn-p

    String hql="select groupid from group_details where groupname= :groupname and clientid= :clientid";
    Query query=session.createQuery(hql);
    query.setParameter(groupname, groupname);
    query.setParameter(clientid, clientid);
    int result = (int) query.uniqueResult();
    System.out.println(result);

我有一个 bean 类 GroupDetails,其中有 settergetter 字段方法。

我的映射文件是,

groupDetails.hbm.xml

<hibernate-mapping>
<class name="com.aurodisplay.its.beans.GroupDetails"    table="group_details">
    <id column="groupid" name="groupid" type="java.lang.Integer"></id>
    <property column="clientid" name="clientid" type="java.lang.Integer"></property>
    <property column="groupname" name="groupname" type="java.lang.String"></property>

</class>
</hibernate-mapping>

在 Hibernate conf 文件中,我映射了上面的文件,

hibernate.cfg.xml

&lt;mapping resource="com/aurodisplay/its/xmlFiles/groupDetails.hbm.xml"/&gt;

我收到以下错误,

org.hibernate.hql.ast.QuerySyntaxException: group_details is not mapped [select groupid from group_details where groupname= :groupname and clientid= :clientid]
org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:257)
org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)

谁能帮帮我。

【问题讨论】:

  • 消息很明确:“group_details 未映射”。你有实体名称“group_details”吗?不,它被命名为“GroupDetails”。
  • GroupDetails是bean类对应group_details db表
  • 学习 HQL。 HQL 不使用表名和列名。绝不。总是实体名称和持久字段/属性名称。
  • 你不要在 hql 中使用表名。 HQL 适用于类名。
  • HQL 使用类名而不是表名。所以在查询中不要使用group_details 使用GroupDetails

标签: java mysql xml hibernate hql


【解决方案1】:

您的查询是 HQL 查询而不是 SQL 查询,要使用您必须使用您的类名,因此请使用 GroupDetails 而不是您的 BDD 表名 group_details,如下所示:

String hql="select groupid from GroupDetails where groupname= :groupname and clientid= :clientid";

编辑:

我觉得你的setParameter也有问题,第一个参数是你的字段类名而不是值本身,所以使用:

query.setParameter("groupname", groupname);
query.setParameter("clientid", clientid);

代替:

query.setParameter(groupname, groupname);
query.setParameter(clientid, clientid);

希望对你有帮助,

【讨论】:

  • 谢谢你解决了我的问题,但现在显示org.hibernate.QueryParameterException: could not locate named parameter [1]
  • 我认为问题在于您在查询中使用字段值而不是字段名称作为参数。使用双引号"。我编辑我的答案,看看它。希望这会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2019-09-01
  • 1970-01-01
相关资源
最近更新 更多