我正在使用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);
这是我的疑问: 在中,我有以下4个字段: 我从中检索数据的路径是: 我该怎么解决这个?
例如,我如何做类似的事情: 结果示例:
问题内容: 我问这个问题有点傻,但是我找不到这个问题的简单答案。 以这个简单的实体为例: 它代表一个人,因此我想添加一个“ 性别 ”属性。 这将是“男性”或“女性”。所以呢? 我可以使用String,并要记住,“ m”代表男性,“ f”代表女性。 或者,我可以使用布尔值“ isMale”(是或否)。 但是,我认为无论哪种情况,Hibernate纯粹主义者都不会高兴:) 仔细搜索一下,我发现最佳实践
我目前正在开发一个解析器。我走在一棵树上,大部分是决定论的(我能找到的数值有限)。 通常在这些情况下,我会创建一个枚举,其中包含我希望找到的值的名称,如下所示: 在这种情况下,我可以通过以下方式检查字符串是否属于枚举: 问题是目前我和特殊角色一起工作({" 我想要的是将枚举与那些特殊的字符元素相关联,例如 并继续使用以下简单明了的方法: 目前,我在任何地方都使用枚举,但对于这些元素,我使用表。我想
我是MVC编程的新手。所以我用的是play框架。 获取未捕获的引用Error:未定义MODERATED