我在UpdatesEntity
和EntriesEntity
之间存在一对多的关系(Update
有很多Entries
)。这种关系看起来像这样:
@Entity
@Table(name = "entries", schema = "", catalog = "whatever")
public class EntriesEntity {
....
private UpdatesEntity update;
....
@ManyToOne
@JoinColumn(name = "update_id")
public UpdatesEntity getUpdate() {
return update;
}
public void setUpdate(UpdatesEntity update) {
this.update = update;
}
我正在尝试运行以下查询
FROM UpdatesEntity u, EntriesEntity e WHERE e.update = u
但我继续说:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: e near line 1, column 99 [FROM com.whatever.model.beans.UpdatesEntity u, com.whatever.model.beans.EntriesEntity e WHERE e.update = u]
但是,如果在查询中我将e.update
替换为e.description
,则可行。唯一的问题似乎是在尝试访问update
的{{1}}字段时。
我现在非常困惑,因为我已经用我认为是这种关系的精确副本来尝试这个,但是这样做有效,但事实并非如此。
我已经调试了几个小时无济于事。任何想法都会非常受欢迎!
答案 0 :(得分:0)
如果您为UpdatesEntity
和EntriesEntity
正确定义了关系,那么您可以使用"加入"如下所示:
内部加入:
FROM UpdatesEntity u inner join u.entriesEntity e
或左外连接:
FROM UpdatesEntity u left outer join u.entriesEntity e
或者,在加载UpdatesEntity对象后直接从UpdatesEntity获取entriesEntity,如下所示:
UpdatesEntity myObj = session.get(UpdatesEntity.class, id);
Set<EntriesEntity> ent = myObj.getEntriesEntity()//assume you used "Set"
在上面的加入中,您可以添加&#34;其中&#34;具有个人财产的条件,例如&#34;其中e.aaa = xxx&#34;。我不认为你可以直接在&#34;中使用实体对象,就像你的那样&#34; WHERE e.update = u&#34;。
答案 1 :(得分:0)
您不需要笛卡尔积,因为您可以使用JOIN:
SELECT e
FROM EntriesEntity e
JOIN FETCH e.update