如何在具有枚举字段的实体上使用JPA CriteriaQuery填充DTO类字符串字段?

雷诺不是比尔·盖茨:

我正在使用JPA Criteria API,在多查询查询中,我想检索一个枚举属性,而不是枚举本身。

这是我的查询:

final CriteriaQuery<MyClassDTO> query = builder.createQuery(MyClassDTO.class);

MyClassDTO我有4个领域如下:

private String icon;
private String provenance;
private int sizeX;
private int sizeY;

我从中检索数据的路径是:

final Root<MyClass> from = query.from(MyClass.class);

MyClass 有3个字段:

@Column
@Enumerated(EnumType.STRING)
private EnumTileIcon enumTileIcon;

@Column
@Enumerated(EnumType.STRING)
private EnumProvenance enumProvenance;

@Column
@Enumerated(EnumType.STRING)
private EnumSize enumSize;

我想要做的是填充MyClassDTO使用query.multiselect,是这样的:

query.multiselect(
    from.get(MyClass_.enumTileIcon.toString()),
    from.get(MyClass_.enumProvenance.name()),
    from.get(MyClass_.enumSize.getWidth()),
    from.get(MyClass_.enumSize.getHeight())
);

我该如何解决?

皮尔霍:

我不确定多选的作用。但是当处理投影时,您可以使用CriteriaBuilder.construct()

创建MyClassDTO喜欢的构造函数(如果需要,添加参数)

public MyClassDTO(EnumTileIcon icon, EnumProvenance provenance) {
    this.icon=icon.toString();
    this.provenance=provenance.toString();
}

在查询中调用构造函数,例如(如果需要,添加get参数以匹配构造函数参数)

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MyClassDTO> cq = cb.createQuery(MyClassDTO.class);
Root<MyClass> root = cq.from(MyClass.class);
cq.select(cb.construct(MyClassDTO.class,
             root.get("enumTileIcon"), root.get("enumProvenance")));

这样你就可以得到

TypedQuery<MyClassDTO> tq = em.createQuery(cq);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用JPA在字段上搜索子字符串?

选择具有与使用spring jpa不同的出现字段的实体

如何在Matlab中使用字符串数组创建具有字段的结构?

如何在具有动态查询的实体中使用联接字段查找数据

解析描述字符串以填充NULL字段

关于猫鼬填充关系字符串字段

使用字符串访问类字段

CsvHelper Configuration.ShouldQuote-仅对DTO上为字符串的字段返回true

如何在C ++中编写具有多个数据字段的类Java枚举类?

如何验证 DTO 字符串字段是指定值之一

如何在字段中查找所有具有特定字符串的文档?(Elasticsearch)

修剪案例类的字符串字段的值

检查ArrayList中数据类中的字符串字段是否具有给定值

JPA实体中的枚举类型字段

将以“ _”分隔的字符串的熊猫系列拆分为可变数量的字段,以填充缺少的字段

如何使用 Shapeless 或 Macro 将 Scala 案例类字段和值作为(字符串,字符串)获取

如何使用jq命令提取具有随机字符串的JSON字段?

如何在具有未知字段的子对象数组上使用 whereToEqual

如何在具有新字段的另一个联接的结果上使用联接

如何使Go将枚举字段打印为字符串?

将字符串解析为具有不同字段名称(键值)的实体

如何在Rails的类中查找所有枚举字段

如何用字符串和日期字段填充DevExpress GridControl?

如何在Spring Data JPA中向现有实体添加新字段/值

如何在Oracle数据库中存储具有枚举字段类型的对象

字符串字段的索引

如何在父类具有相同const字段的继承方法中使用子类的const字段?

如何在JPA实体中创建非持久字段?

如何在 JPA 实体中将字段设为可选?