我有两个具有公共属性-id的枚举:
public enum AccessLevel {
PUBLIC("public"),PRIVATE("private");
private String id;
}
public enum Status {
SUCCESS("success"),TIMEOUT("timeout");
private String id;
}
我需要此类枚举的通用MapStruct映射(无需定义每个此类枚举的映射)。
是的,可以通过@TargetType注释实现。对于此类枚举,您需要一个通用接口:
public interface IdEnum {
String getId();
}
然后,您需要能够通过id创建此类接口实例的枚举:
static <T extends Enum<T> & IdEnum> T getById(Class<T> enumClass, String id) {
for (T e : enumClass.getEnumConstants()) {
if (e.getId().equals(id)) {
return e;
}
}
throw new IllegalArgumentException("No enum const " + enumClass.getName() + " for id '" + id + "'");
}
那么泛型映射器可能看起来像这样(@TargetType注释是成功的关键):
public class IdEnumMapper {
public <T extends Enum<T> & IdEnum> T mapToEnum(String value, @TargetType Class<T> idEnumClass) {
return IdEnum.getById(idEnumClass, value);
}
public String mapToString(IdEnum idEnum) {
return idEnum.getId();
}
}
只需将其用于映射包含此类枚举的类的映射器:
@Mapper(uses = {IdEnumMapper.class})
public interface FilterMapper {
....
问题内容: 我有一个类别hibernate模型: 其中有一个类型字符串字段。我也有一个Java枚举,它表示类别的类型: 我想用它代替字符串类型。SQL在varchar参数中接受两个不同的值:或。我希望Category模型类接受一个枚举变量- 每当hibernate要求它时,都以某种方式将其映射到字符串。 可能吗? 问题答案: 是的,有可能。它应该是:
我有一个类别Hibernate模型: 它们具有类型字符串字段。另外,我还有一个Java枚举,它表示类别的一种类型:
问题内容: 我有一个类别休眠模型: 其中有一个类型字符串字段。我也有一个Java枚举,它表示类别的类型: 我想用它代替字符串类型。SQL在varchar参数中接受两个不同的值:或。我希望Category模型类接受一个枚举变量- 并在休眠要求时以某种方式将其映射到字符串。 可能吗? 问题答案: 是的,有可能。它应该是:
我正在使用以下代码来包含枚举值和与之关联的相应字符串。我想知道是否有更简单的方法来实现这一点?
问题内容: 我想在打字稿中使用字符串枚举,但在其中看不到对反向映射的支持。我有一个这样的枚举: 我需要这样使用它: 是的,我不知道字符串中有什么,如果字符串未在枚举定义中显示,我需要将其解析为枚举或在运行时解析失败。我该如何做到整洁呢?提前致谢 问题答案: 我们可以将其设为一个类型,并将值设为同一类型。 更严格的版本: 字符串枚举作为此答案: