Spring JPA Criteria Builder特定列

时间:2019-07-15 05:58:43

标签: java hibernate spring-boot jpa

我正在使用JPA条件构建器来查询数据库中的记录。但是,我想使用JPA条件API从表中返回特定列。

当前,我的实现返回完整对象。但是,我只想返回特定的列,这些列可以是动态的。 下面的代码将在Person表上查询并返回Person的完整对象。

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Person> query = cb.createQuery(Person.class);
    Root<Person> root = query.from(Person.class);
    query.select(cb.equal(root.get("id"), 1));

    TypedQuery<Person> result = em.createQuery(query);
    List<Person> personList = result.getResultList();

我知道我们可以创建一个类似PersonMini的精简类,该类仅包含如下所示的特定字段,但就我而言,这些列可以是动态的,并且可以基于用户的偏好。

class PersonMini {
     private long id;
     private String name;
     // .. constructor and getter/setter
}

创建单独的迷你类Person是不可行的。有没有人解决过这样的问题,或者如果可以解决我的问题,请提出另一种方法。

编辑

here中所述。

  

如果某个用户定义的类X的条件查询的类型为CriteriaQuery(即,通过将X类参数传递给createQuery方法创建的条件查询对象),则传递给multiselect方法的列表元素将传递给 X构造函数,并将为每一行返回X类型的实例

如果我使用 multiselect 方法并使用 PersonMini 类,则每个字段的每个组合都需要一个构造函数。因为字段的选择是由用户完成的。选择字段不是静态的。

假设,在PersonMini类中,我有3个字段。 Id,名称和城市,然后用户可以选择 Id和名称名称和城市城市(单独) Id(单独) Id和城市。对于每种组合,我都需要构造函数,否则它将抛出错误运行时。

对于两三个字段,可以使用不同的构造函数组合,但对于15-20个字段则不行。

0 个答案:

没有答案