【问题标题】:HQL query: Unknown column 'id' in 'where clause'HQL 查询:“where 子句”中的未知列“id”
【发布时间】:2014-10-21 13:25:25
【问题描述】:

我得到了以下 2 个对象:

@Entity
@Table(name = "B")
@NamedQueries({
@NamedQuery(name = "A.searchById", query = "SELECT myCollection FROM A WHERE id = :id"),
... })
public class B{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "B_ID")
    int id;

    @Column(name = "NAME")
    String name;
}

@Entity
@Table(name = "A")
@NamedQueries({
@NamedQuery({several named queries...})
public class A{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "A_ID")
    int id;

    @Column(name = "NAME")
    String name;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "MAPPING_B_A", joinColumns = { @JoinColumn(name = "A_ID") },    inverseJoinColumns = { @JoinColumn(name = "B_ID") })
    List<B> myCollection;
}

我发出以下查询:

SELECT myCollection FROM A WHERE id = :id

Hibernate 返回:'where 子句'中的未知列 'id'

我将查询更改为

SELECT myCollection FROM A as a WHERE a.id = :id

一切正常。但是第一个查询有什么问题?好的,两个类中都有一个 id 列,但 FROM 子句中只有一个类!我还尝试在其中一个类中更改 id 字段的名称,但没有帮助。

【问题讨论】:

  • 您的查询很好,所以它必须是配置。由于我没有看到注释,我假设您使用的是 XML 配置。你能发布相关部分吗?
  • 其实我是用注解的。我没有发布它们,对不起。我现在更新了我的问题。
  • 所以我假设在你的 DAO 中你调用了命名查询。您可以尝试直接执行 HQL(所以不要调用命名查询)。
  • @StijnGeukens 没错,这就是我在 DAO 中的做法。现在,正如您所建议的,我尝试直接提供查询字符串:Query query = session.createQuery("SELECT myCollection FROM A WHERE id = " + id); 这没有帮助,我又遇到了同样的错误。

标签: hibernate hql alias


【解决方案1】:

根据documentation,它应该可以在没有别名的情况下工作

from Cat where name='Fritz'

我想到的唯一另一件事是id 是保留字,这会导致问题。您可以尝试使用不同的文件,以检查是否是这种情况。

【讨论】:

  • 我也考虑过这种可能性并尝试使用另一个字段-“名称”。我再次收到错误消息,但出现了不同的错误消息。这是关于“名称”列不明确的问题。
  • id 是 HQL 中的“保留”词,因为它是 @Id 字段的别名。因此,即使您的字段被称为 myAId,您仍然可以在 HQL 中使用 id 引用它。
  • @StijnGeukens 不错,不知道这个细节
  • @EwgenijSokolovski "name" 在这种简单的情况下不应该发生模棱两可的情况,您确定您没有忘记发布一些重要的细节(我假设这只是示例中的简化代码)?您的实体之间是否有一些继承?
  • @PredragMaric 嗯,我在帖子中省略了我的注释。也许他们可能是原因?我现在添加了它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
相关资源
最近更新 更多