2014-01-29 34 views
0

我正在将一些应用程序逻辑从JDBC迁移到Hibernate。使用JDBC有许多简单的插入,更新和选择语句,我正在尝试为此使用HQL。我需要声明一个使用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类?

+0

你想用'setString(“property”,“some prop value”)'方法做什么?它似乎是'setParameter(String string,Object o)'而不是。您在实体类上执行HQL。你需要他们。毫无疑问。 – Tiny

+0

我同意..继续使用POJO方法。 – user3137375

回答

0

使用Hibernate的:

要在HQL查询在子句中使用的表FROM,你必须为豆你的表映射

例1:

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

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

你不能有一个真正的表,但将你的查询结果重定向到一个bean中使用你的bean的一个构造函数进行映射。

例2:

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

在例2类MyNotMappedEntity必须有一个正确与同类型传递两个领域中的两个参数的构造函数。

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

相关问题