Hibernate HQL无法从实体名称获取表名

Hibernate HQL无法从实体名称获取表名,hibernate,hql,Hibernate,Hql,我有一个实体叫做计划。此实体具有属性规划器 在这种情况下,计划员离开公司,必须将其计划分配给其他计划员 因此,我在hql中使用实体和属性名称编写了此查询: String hql = "update Plan set planner = :newPlanner where planner = :oldPlanner"; Query query = getSession().createSQLQuery(hql); query.setParameter("newPlanner", newPlanne

我有一个实体叫做计划。此实体具有属性规划器

在这种情况下,计划员离开公司,必须将其计划分配给其他计划员

因此,我在hql中使用实体和属性名称编写了此查询:

String hql = "update Plan set planner = :newPlanner where planner = :oldPlanner";
Query query = getSession().createSQLQuery(hql);
query.setParameter("newPlanner", newPlanner);
query.setParameter("oldPlanner", oldPlanner);
但是,当我尝试执行它时,Hibernate会产生以下结果:

Hibernate:
    update
        Plan
    set
        planner = ?
    where
        planner = ?
2017-03-03 08:56:31 TRACE BasicBinder:81 - binding parameter [2] as [BIGINT] - [5]
2017-03-03 08:56:31 TRACE BasicBinder:81 - binding parameter [1] as [BIGINT] - [6]
2017-03-03 08:56:31 WARN  SqlExceptionHelper:144 - SQL Error: 156, SQLState: S1000
2017-03-03 08:56:31 ERROR SqlExceptionHelper:146 - Incorrect syntax near the keyword 'Plan'.
你看这里有个问题。我的基础表称为plans,因为plan是SQL中的关键字。我的表也是非默认模式的一部分

HQL似乎没有用schema.plans替换Plan,也没有用planner\u id替换planner的列名

我做错什么了吗?我编写了其他HQL代码,没有问题,但是那些底层表名与实体名匹配,并且都是Select语句


我想我可以只指定基础表名,但这是否意味着我还必须指定列名?我最关心的是模式。对于使用该产品的不同客户机,我使用不同的模式。因此,我不希望有任何硬编码的模式。

您使用的是createSQLQuery。顾名思义,这需要的是SQL,而不是HQL。

哇,我真是疯了。谢谢