Hibernate HQL不断抛出' QuerySyntaxException:意外令牌'

时间:2015-03-18 22:36:37

标签: java hibernate jpa hql hibernate-mapping

我在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,则可行。唯一的问题似乎是在尝试访问update的{​​{1}}字段时。

我现在非常困惑,因为我已经用我认为是这种关系的精确副本来尝试这个,但是这样做有效,但事实并非如此。

我已经调试了几个小时无济于事。任何想法都会非常受欢迎!

2 个答案:

答案 0 :(得分:0)

如果您为UpdatesEntityEntriesEntity正确定义了关系,那么您可以使用"加入"如下所示:

内部加入:

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