带有非实体参数的JPA标准构造

带有非实体参数的JPA标准构造,jpa,eclipselink,criteria-api,jpa-2.1,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

我想创建一个复杂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);
...
CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(MyDto.class);
Root=query.from(MyEntity.class);
builder.construct(MyDto.class,root.get(“entityField”),someString);
...
但是我不允许这样做,因为
构造
方法只需要我
javax.persistence.criteria.Selection
参数


问题是:有没有一种方法可以使用CriteriaAPI实现类似的功能(一次性)?或者我需要先加载MyEntity对象,然后遍历它们并创建一个DTO列表(不太漂亮)?

每次我有一个从不同实体收集字段的投影时,我都会使用这种方法,或者出于隐私原因,我不能返回一些数据(例如密码)


建筑商。文字(价值)?谢谢!是的,这正是我想要的:)
query.select(
    builder.construct(
      MyDto.class, 
      root.get("myfield"), // for field
      cb.literal(1), // for number
      cb.literal("blah blah")  // for string
));