我是否需要声明一个使用HQL的类?

时间:2014-01-29 21:54:35

标签: hibernate hql

我正在将一些应用程序逻辑从JDBC迁移到Hibernate。使用JDBC有许多简单的insert,update和select语句,我正在尝试使用HQL来实现此目的。

例如,使用JDBC,以下是查询

select * from tab where property =<given value>

我像这样使用了HQL

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

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

  

“org.hibernate.hql.internal.ast.QuerySyntaxException:tab是   没有映射“

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

1 个答案:

答案 0 :(得分:0)

使用Hibernate:

要在子句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必须具有正确的构造函数,其中包含两个传递相同类型的两个字段的参数。

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