JPA - CriteriaQuery avec la clause “where”

Je sais que cela peut être une question très simple pour certains de u, mais je vais avoir un moment difficile essayer de trouver comment construire un simple Sélectionnez * à Partir de X, Où X. a = :myparam à l'aide d'un CriteriaBuilder.

Maintenant, c'est le code que j'ai réussi à la construction de la mesure:

    CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
    CriteriaQuery cq = cb.createQuery();

    Root<MyClass1> r = cq.from(MyClass1.class);
    cq.select(r);

    ParameterExpression<Long> p = cb.parameter(Long.class);

    cq.where(cb.equal(r.get("anotherClass.id"), p));

    javax.persistence.Query q = getEntityManager().createQuery(cq);

La classe où je suis de l'application de cette requête est celui-ci:

@Entity
public class MyClass1 implements Serializable {
    @Id
    private Long id;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ANOTHERCLASS_ID")    
    private AnotherClass anotherClass;
    ...
}

@Entity
public class AnotherClass implements Serializable {
    @Id
    private Long id;
    ...
}

J'ai juste besoin de sélectionner tous les enregistrements de myclass1 "OÙ" anotherClass.id = 1L, et où j'ai mis le "1L", je sais que ça se passe dans p mais où?

C'est tout. Semble simple, mais je ne suis pas vraiment familier avec ce CriteriaBuilder chose, donc espérons que vous pouvez avoir quelques réponses.

Grâce.

OriginalL'auteur Joe Almore | 2011-11-23