我在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
的EntriesEntity
字段时。我现在很困惑,因为我尝试过使用这种方式准确地复制了这种关系,但这确实可行,但事实并非如此。
我已经调试了好几个小时都没有用。任何想法都将非常受欢迎!
最佳答案
如果您为UpdatesEntity
和EntriesEntity
正确定义了关系,则可以使用“ join”,如下所示:
内部联接:
FROM UpdatesEntity u inner join u.entriesEntity e
或左外部联接:
FROM UpdatesEntity u left outer join u.entriesEntity e
或者,在加载UpdatesEntity的对象后,直接从UpdatesEntity获取entryEntity,如下所示:
UpdatesEntity myObj = session.get(UpdatesEntity.class, id);
Set<EntriesEntity> ent = myObj.getEntriesEntity()//assume you used "Set"
在上面的联接中,您可以使用单个属性添加“ where”条件,例如“ where e.aaa = xxx”。我认为您不能像在“ WHERE e.update = u”中那样直接在“ where”中使用实体对象。