【问题标题】:Do I need to declare a class for using HQL?我需要声明一个使用 HQL 的类吗?
【发布时间】:2014-01-29 21:54:34
【问题描述】:

我正在将一些应用程序逻辑从 JDBC 迁移到 Hibernate。使用 JDBC 有许多简单的插入、更新和选择语句,我正在尝试使用 HQL 来实现此目的。

以JDBC为例,查询如下

select * from tab where property =<given value>

我是这样使用 HQL 的

session.createQuery(query).setString("property", "some prop value");

当我运行代码时,我不断收到错误提示

"org.hibernate.hql.internal.ast.QuerySyntaxException: 选项卡是 未映射”

是否需要为我计划使用 hql 执行的每个查询声明一个 POJO 类?

【问题讨论】:

  • 你想用setString("property","some prop value")方法做什么?它似乎是setParameter(String string, Object o)。您在实体类上执行 HQL。你需要它们。没有问题。
  • 我同意.. 继续使用 POJO 方法。

标签: hibernate hql


【解决方案1】:

休眠的使用:

要在 FROM 子句中使用 HQL 查询中的表,您必须将表映射为 bean

示例 1:

String hql = "SELECT e FROM " + MyEntity.class.getName() + " e ";

MyEntity 类必须映射一个真实的表来访问你的数据库(你可以使用 JPA 表示法或 XML 表示法,我更喜欢第二种)

你不能有一个真正的表,而是将你的查询结果重定向到一个没有使用你的 bean 的 costructor 映射的 bean。

示例 2:

String hql = "SELECT new " + MyNotMappedEntity.class.getName() + 
"(e.field1, e.field2)" +
" FROM " + MyEntity.class.getName() + " e ";

在示例 2 中,您的类 MyNotMappedEntity 必须具有正确的构造函数,其中传递了两个字段的相同类型的两个参数。

告诉我没关系,或者你想了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2022-01-08
    相关资源
    最近更新 更多