java – JPA – 带有“WHERE”子句的CriteriaQuery

我知道这对你们来说可能是一个非常简单的问题,但是我很难找到如何使用CriteriaBuilder构建一个简单的Select * From X Where X.a =:myparam.

现在,这是我到目前为止构建的代码:

    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);

我应用此查询的类是这样的:

@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;
    ...
}

我只需要从myclass1“WHERE”anotherClass.id = 1L中选择所有记录,我在哪里设置“1L”,我知道它在p中但是在哪里?

就这样.看起来很简单,但我真的不熟悉这个CriteriaBuilder的东西,所以希望你能得到一些答案.

谢谢.

最佳答案
Criteria查询中的参数与JPQL或本机查询中的相同,您可以在Query上设置它们.

javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setParameter(1, 1L);

请注意,您正在使用位置参数,使用命名的参数将名称传递给parameter().

ParameterExpression<Long> p = cb.parameter(Long.class, "id");
...
q.setParameter("id", 1L);

看到,
http://en.wikibooks.org/wiki/Java_Persistence/Querying#Parameters

转载注明原文:java – JPA – 带有“WHERE”子句的CriteriaQuery - 代码日志