我在UpdatesEntityEntriesEntity之间有一对多的关系(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,它将起作用。唯一的问题似乎是在尝试访问updateEntriesEntity字段时。

我现在很困惑,因为我尝试过使用这种方式准确地复制了这种关系,但这确实可行,但事实并非如此。

我已经调试了好几个小时都没有用。任何想法都将非常受欢迎!

最佳答案

如果您为UpdatesEntityEntriesEntity正确定义了关系,则可以使用“ 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”中使用实体对象。

07-24 19:14