将SQL转换为HQL where子句

时间:2011-04-18 11:42:40

标签: java mysql hibernate hql

这应该很容易,但我的应用程序会抛出持续的错误,而且我是Hibernate的新手。

我正在尝试使用Hibernate在我的网络应用中进行简单的HQL查询。

我想执行以下SQL查询:

SELECT * FROM deal WHERE deal_status='A' OR WHERE deal_status='O';

HQL似乎不适用于或者子句,这里是我在我的网络应用程序中的当前HQL语句:

FROM deal d where d.deal_status='O' or d.deal_status='A' order by d.id

感谢任何Hibernate查询帮助

此致 亚历

1 个答案:

答案 0 :(得分:3)

  • HQL基于您的实体的字段名称而非您的类名称,以及类名称
  • c.id - c未定义

我强烈认为Deal(Classname首字母大写)中的字段不是deal_status但是状态,那么查询必须是这样的。 (我跳过了c.id的东西,因为我不知道你的意思。)

 SELECT d FROM Deal d WHERE d.status='O' or d.status=`A`

注意Deal

中的上半部分

这只有在Deal.status是String或类似的东西时才有效,但如果是Enum则不行。处理Enum的一种方法是:

Query query = session.createQuery(
    "SELECT d FROM Deal d WHERE d.status=:o or d.status=:a");
query.setParameter("a", MyEnum.A);
query.setParameter("o", MyEnum.O);