具有非实体参数的JPA Criteria构造

时间:2015-04-09 15:02:21

标签: jpa eclipselink criteria-api jpa-2.1

我想创建一个复杂DTO对象列表,其中包含来自多个实体和一个非实体参数的数据。假设我的DTO类有构造函数:

public MyDto(String entityField, String someString) {...}

我希望使用CriteriaBuilder.construct方法创建我的列表:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<MyDto> query = builder.createQuery(MyDto.class);
Root<MyEntity> root = query.from(MyEntity.class);
builder.construct(MyDto.class, root.get("entityField"), someString);
...

但我不允许这样做,因为construct方法只需要javax.persistence.criteria.Selection个参数。

问题:是否有一种方法可以使用Criteria API与此类似(一气呵成)?或者我需要首先加载MyEntity个对象然后通过它们创建一个DTO列表(不是那么漂亮)?

1 个答案:

答案 0 :(得分:0)

每次我使用此方法收集来自不同实体的字段或出于隐私原因我不得返回某些数据(例如密码)

query.select(
    builder.construct(
      MyDto.class, 
      root.get("myfield"), // for field
      cb.literal(1), // for number
      cb.literal("blah blah")  // for string
));