【问题标题】:JPA Criteria API With Named Query带有命名查询的 JPA 标准 API
【发布时间】:2015-07-11 14:19:53
【问题描述】:

标题说明了一切:是否可以在使用 JPA 标准 API 构建的查询中使用命名查询?类似于(简单示例):

@Entity
@NamedQuery(name = "complexFooQuery", query = "FROM Foo where ....")
class Foo {
    ////....
}

List<Foo> getFoo() {
    CriteriaQuery<Foo> cq = em.createQuery(Foo.class);
    cq.select(<somehow specify complex foo named query>);
    return em.createQuery(cq).getResultList();
}

【问题讨论】:

    标签: java hibernate jpa criteria-api named-query


    【解决方案1】:

    没有。 标准查询是动态构造的(以便进行类型安全处理)......如果只是转储一些命名查询,那么将没有类型安全处理。此外,严格 JPQL 的 SELECT 子句中的子查询是非法的(JPQL 查询也以“SELECT {alias}”开头)

    【讨论】:

    • 您仍然可以使用字符串作为属性名称,对吧?在这种情况下,类型安全不是明确的。
    • 理论上是的,但是字符串列名对我不起作用;必须事先生成元模型,然后用root.get(MyEntity_.userId) 之类的东西获取列。从而确保类型安全。
    猜你喜欢
    • 2011-11-12
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2013-03-11
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多