【发布时间】: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);这没有帮助,我又遇到了同样的错误。