我想创建一个复杂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列表(不是那么漂亮)?
答案 0 :(得分:0)
每次我使用此方法收集来自不同实体的字段或出于隐私原因我不得返回某些数据(例如密码)
query.select(
builder.construct(
MyDto.class,
root.get("myfield"), // for field
cb.literal(1), // for number
cb.literal("blah blah") // for string
));