【发布时间】:2017-09-25 10:41:12
【问题描述】:
我的班级Role 有一个属性enumP 是:
@Convert(converter = EnumPConverter.class)
@Enumerated(EnumType.STRING)
private EnumP enumP;
这是转换器:
@Converter(autoApply = false)
public class EnumPConverter implements AttributeConverter<EnumP, String> {
@Override
public String convertToDatabaseColumn(final EnumP attribute) {
switch (attribute) {
case X:
return "X";
case Y:
return "Y";
case Z:
return "Z";
default:
throw new DbException("Type of enumeration is unknown at the time of conversion to a DB value.",
new IllegalArgumentException("Value received : " + attribute));
}
}
@Override
public EnumP convertToEntityAttribute(final String dbData) {
switch (dbData) {
case "X":
return EnumP.X;
case "Y":
return EnumP.Y;
case "Z":
return EnumP.Z;
default:
throw new DbException("Unknown enumerated value was found in the DB",
new IllegalArgumentException("Value received : " + dbData));
}
}
}
这是枚举:
public enum EnumP {
X, Y, Z;
}
当谓词是:
builder.isTrue(fromRole.get(Role_.enumP).in((Object[]) filter.getFilterSetValues()))
其中getFilterSetValues() 将返回一个字符串数组,如下所示:
["X", "Y"]
我得到以下异常:
Parameter value [X] did not match expected type [EnumP (n/a)]
我试图在转换器上添加一个行断点,但调试器并没有在该行停止。
PS:我无权修改Enum,所以任何操作都应该在转换器内部完成。
【问题讨论】:
-
你的意思是
@Convert(converter = EnumPConverter.class),对吧? -
@crizzis 是的,对此感到抱歉
标签: java jpa enums jpa-2.0 criteria