gpt4 book ai didi

java - 带有枚举的 JPA 2 Criteria API

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:30 25 4
gpt4 key购买 nike

我有以下实体:

public class Role extends AbstractDomain<Long> {
@Id
@Column
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen_x")
@UiInfo(name = "Identifiant")
private Long roleId;

@Column
@UiInfo(name = "Libellé")
private String lib;

@Column
@UiInfo(name = "Provenance")
private EnumP enumPID;
}

枚举:

public enum EnumP {
W, X, Y, Z;
}

使用 JPA Criteria API,我想获取 Role 列表,其中数组中的 Role.enumPID 包含字符串形式的枚举值。

这是我尝试过的谓词的代码:

builder.isTrue(fromRole.get(Role_.enumPID).in((Object[]) filter.getFilterSetValues()))

并且 filter.getFilterSetValues() 包含字符串形式的枚举值,如下所示:

["X","Y"]

但我收到此错误消息:

java.lang.IllegalArgumentException: Parameter value [X] did not match expected type [***.EnumP (n/a)]

我该如何解决这个问题?

最佳答案

您应该首先对枚举字段进行充分注释:

@Enumerated(EnumType.STRING)
@UiInfo(name = "Provenance")
private EnumP enumPID;

那么您应该在查询中使用特定的 EnumP 元素作为参数,而不是它们的 String 等效项。

您需要将字符串集合转换为相应的 EnumP 对象集合:

public static List<EnumP> fromStringArray(String[] array){
List<EnumP> returnList = new ArrayList<>;

for(String element: array){
for(EnumP enumP: EnumP.values()){
if(enumP.name().equals(element)){
returnList.add(enumP);
}
}
}

return returnList;
}

关于java - 带有枚举的 JPA 2 Criteria API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46345558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com