HQL没有从实体名称

时间:2017-03-03 15:40:24

标签: hibernate hql

我有一个名为Plan的实体。该实体具有属性Planner。

有一种情况是Planner离开公司,他的计划必须分配给不同的计划者。

所以我使用实体和属性名称在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'.

所以你看到这里有问题。我的基础表称为“计划”,因为“计划”是SQL中的关键字。我的表也是非默认架构的一部分。

似乎HQL没有将“Plan”替换为“schema.plans”,也不应该替换应该是planner_id的规划器的列名。

我在这里做错了吗?我编写了其他HQL没有问题,但那些基础表名称与实体名称匹配,并且都是Select语句。

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

1 个答案:

答案 0 :(得分:1)

您正在使用createSQLQuery()。顾名思义,这需要SQL,而不是HQL。