具有非实体参数的 JPA 标准构造
Posted
技术标签:
【中文标题】具有非实体参数的 JPA 标准构造【英文标题】:JPA Criteria construct with non-entity parameter 【发布时间】:2015-04-09 15:02:20 【问题描述】:我想创建一个复杂 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 列表(不是那么漂亮)?
【问题讨论】:
builder.literal(value) ? 谢谢!是的,这正是我要找的:) 【参考方案1】:每次我有一个从不同实体收集字段的投影时,我都会使用这种方法,或者出于隐私原因,我不能返回一些数据(例如密码)
query.select(
builder.construct(
MyDto.class,
root.get("myfield"), // for field
cb.literal(1), // for number
cb.literal("blah blah") // for string
));
【讨论】:
以上是关于具有非实体参数的 JPA 标准构造的主要内容,如果未能解决你的问题,请参考以下文章