我有以下实体:
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;
}
EnumP:
public enum EnumP {
W, X, Y, Z;
}
使用JPA Criteria API我希望获得Role
的列表,其中数组中的Role.enumPID
包含枚举值为字符串。
这是我尝试Predicate
的代码:
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)]
我该如何解决这个问题?
答案 0 :(得分:0)
您应首先充分注释枚举字段:
@Enumerated(EnumType.STRING)
@UiInfo(name = "Provenance")
private EnumP enumPID;
然后,您应该将查询中的特定EnumP
元素用作params,而不是它们的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;
}