I always get the same error when using the criteria 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 )
The code with the criteria API is the following:
        ....
    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;
}
The problem exists because of the following two lines: " Join friends2R; friends2R = root2R.join("diaries");"
Without the mapping (with an adjusted select-clause) i would get the searched User with the fitting rootId, so that there occurs no error. But now i wanna map the User with the Diaries and show all diaries of the User-entity. But it always ends in the error ahead. Whether i use "like" or "equal", it doesn't work.
The generell code shouldn't have an error, because i'm using the same code already to get all mapped Users of a User (many to many relation) => no problem.
I just don't understand, why this error occurs and especially why it mentions the Diary as Base although the user should be mentioned as the base-class...and the id is right too and also appears so in the database...
I really hope that you can help me, thanks in advance!
How is rootId mapped, using a Basic, or OneToOne? Seems to be a bug, please log the bug on EclipseLink.
Your code does not seem correct though, the
CriteriaQuery cq = cb.createQuery(User.class);
should be,
CriteriaQuery cq = cb.createQuery(Diary.class);
should it not?
Doesn't Diary also have a relationship to User? You could just query Diary where its user has the id.
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论