类型安全条件查询,JPA 2.0 新特性:路径未知?

Mar*_*tin 1 java hibernate jpa maven jakarta-ee

当在 jbdevstudio 中启动一个新的 Java EE (maven) web 应用程序时,已经包含了一些代码,包括带有注册的 Member 模型。在 MemberRepository 类中,有两种方法以这种方式使用条件查询:

public Member findByEmail(String email) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Member> criteria = cb.createQuery(Member.class);
    Root<Member> member = criteria.from(Member.class);
    // Swap criteria statements if you would like to try out type-safe criteria queries, a new
    // feature in JPA 2.0
    // criteria.select(member).where(cb.equal(member.get(Member_.name), email));
    criteria.select(member).where(cb.equal(member.get("email"), email));
    return em.createQuery(criteria).getSingleResult();
}

public List<Member> findAllOrderedByName() {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Member> criteria = cb.createQuery(Member.class);
    Root<Member> member = criteria.from(Member.class);
    // Swap criteria statements if you would like to try out type-safe criteria queries, a new
    // feature in JPA 2.0
    // criteria.select(member).orderBy(cb.asc(member.get(Member_.name)));
    criteria.select(member).orderBy(cb.asc(member.get("name")));
    return em.createQuery(criteria).getResultList();
}
Run Code Online (Sandbox Code Playgroud)

我想使用(例如尝试)建议的类型安全标准查询的代码行,但编译器在Member_. 我在这里缺少什么?

问候马丁

Nei*_*ton 5

要在 Criteria 查询中使用JPA 静态元模型类,您必须首先创建静态元模型类。所有 JPA 提供程序都包含一种方法,他们的文档会告诉您如何完成。这里的链接显示了一个

  • 您的 JPA 提供程序将为您生成类(通常通过注释处理器),因此它将决定它们的放置位置。我的提供程序 (DataNucleus) 将它们放在与实体类相同的包中。 (2认同)