Hibernate HQL查询:“where子句”中的未知列“id”

Hibernate HQL查询:“where子句”中的未知列“id”,hibernate,hql,alias,Hibernate,Hql,Alias,我得到了以下两个对象: @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_I

我得到了以下两个对象:

@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;
}
Hibernate返回:“where子句”中的未知列“id”

我把我的问题改成

SELECT myCollection FROM A as a WHERE a.id = :id
一切正常。但是第一个问题是什么?好的,两个类中都有一个id列,但FROM子句中只有一个类!我还尝试过在其中一个类中更改id字段的名称,但没有任何帮助。

根据定义,它应该在没有别名的情况下工作

from Cat where name='Fritz'

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

我也考虑过这种可能性,并尝试使用另一个字段名。我再次收到一个错误,但带有不同的错误消息。这是关于列名不明确的问题。id在HQL中是一个“保留”字,因为它是@id字段的别名。所以,即使您的字段名为MyAID,您仍然可以在HQL中使用id引用它。@StijnGeukens Nice,不知道这一点detail@EwgenijSokolovski在这个简单的例子中不应该出现名称不明确的情况,你确定你没有忘记发布一些重要的细节吗?我想这只是示例中的简化代码?你的实体之间有什么继承关系吗?@pred-fragmaric-Hmm,我在帖子中省略了我的注释。也许这就是原因?我现在添加了它们。您的查询很好,所以它必须是配置。因为我没有看到注释,所以我假设您使用的是XML配置。你能发布相关部分吗?事实上,我使用注释。对不起,我没有把它们寄出去。我现在更新了我的问题,所以我假设在DAO中调用命名查询。您是否可以尝试直接执行HQL以避免调用命名查询。@StijnGeukens完全正确,我在DAO中就是这样做的。现在,正如您所建议的,我尝试直接提供查询字符串:query query=session.createQuerySELECT myCollection FROM WHERE id=+id;这没用,我又犯了同样的错误。
from Cat where name='Fritz'