JPA:使用Criteria API时出现无效键错误

时间:2011-04-05 22:35:59

标签: jpa criteria criteria-api

使用条件API时,我总是会遇到同样的错误:

    Local Exception Stack:
Exception [EclipseLink-6075] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.QueryException
Exception Description: Object comparisons can only use the equal() or notEqual() operators.  Other comparisons must be done through query keys or direct attribute level comparisons.
Expression: [
Relation operator  LIKE
   Query Key rootId
      Base de.uni.entities.Diary
   Constant Testaccount]
Query: ReportQuery(referenceClass=Diary )

标准API的代码如下:

        ....
    CriteriaBuilder cb = getEm().getCriteriaBuilder();
    CriteriaQuery<User> cq = cb.createQuery(User.class);

    // Restrictions
    Predicate[] predicate = new Predicate[1];

    // From-clause
    Root<User> root2R = cq.from(User.class);
    predicate[0] = cb.like(root2R.<String> get("rootId"), id);

    Join<Clazz, Diary> friends2R;
    friends2R = root2R.join("diaries");

    cq.where(predicate);

    // Select-clause
    cq.select((Selection<? extends Clazz>) friends2R);

    Query query = getEm().createQuery(cq);

    List<Object> data = query.getResultList();

    return data;

}

由于以下两行存在问题: “加入friends2R; friends2R = root2R.join(“日记”);“

没有映射(使用经过调整的select子句),我将使用拟合rootId获取搜索到的User,这样就不会出现错误。但现在我想用“日记”映射用户并显示用户实体的所有日记。但它始终以未来的错误结束。无论我使用“喜欢”还是“平等”,它都不起作用。

generell代码应该没有错误,因为我已经使用相同的代码来获取用户的所有映射用户(多对多关系)=&gt;没问题。

我只是不明白,为什么会出现这个错误,特别是为什么它提到日记作为基础,虽然用户应该被提到作为基类...而且id也是正确的,并且在数据库中也是如此...

我真的希望你能提前帮助我!

1 个答案:

答案 0 :(得分:1)

rootId是如何使用Basic或OneToOne映射的? 似乎是一个错误,请在EclipseLink上记录错误。

你的代码似乎不正确,

CriteriaQuery cq = cb.createQuery(User.class);

应该是,

CriteriaQuery cq = cb.createQuery(Diary.class);

不应该吗?

日记是否也与用户有关系?您可以只查询日记,其用户具有ID。