为 JHipster 创建一个通用的枚举转换器
Create a generic enumeration converter for JHipster
我有一个包含枚举类型元素的实体:
@Column(name = "COL_NAME")
@Convert(converter = EnumConverter.class)
private COLNAME colname;
我需要一个通用转换器(我不想为实体中的每个枚举编写一个新转换器)
import java.lang.reflect.*;
@Converter(autoApply = false)
public class EnumConverter implements AttributeConverter<Object, String>{
@Override
public String convertToDatabaseColumn(Object attribute) {
String valuetoconvert = attribute.toString();
//do something on valuetoconvert
return valueconverted;
}
@Override
public Object convertToEntityAttribute(String dbData) {
// Object to return with dbData read from DB and modified
return objectconverted
}
}
在 convertToEntityAttribute 中,我尝试使用 Enumeration.valueOf,但此方法需要枚举的 class。我怎样才能找到这个?...如果这是这样做的正确方法。
谢谢
P.S。我发现,谷歌搜索,一些方法倾向于最小化编写的代码,但在每种情况下我都必须为每个枚举写一个 class 。我不想要这个。可能吗?
因此,本质上,您是在询问如何将带注释的 属性 的类型注入到 AttributeConverter
中。恐怕香草 JPA 是不可能的。
如果您使用的是 Hibernate,则可以改用复合用户类型。参见 here,特别是第 4.4 节。 'Type Parameterization'。你最终会得到类似的东西:
@Type(type = "com.example.ConvertibleEnumType", parameters = @Parameter(name = "lookup", value = MyEnum.class))
private MyEnumClass property;
并且您仍然必须严重依赖自定义 ConvertibleEnumType
定义中的反射,但它会起作用 - 您将能够读取 [=14= 中的 lookup
的值].
(TBH 个人,我仍然会考虑每个枚举一个单独的转换器,使用例如 here 描述的方法作为更清洁的解决方案)
我有一个包含枚举类型元素的实体:
@Column(name = "COL_NAME")
@Convert(converter = EnumConverter.class)
private COLNAME colname;
我需要一个通用转换器(我不想为实体中的每个枚举编写一个新转换器)
import java.lang.reflect.*;
@Converter(autoApply = false)
public class EnumConverter implements AttributeConverter<Object, String>{
@Override
public String convertToDatabaseColumn(Object attribute) {
String valuetoconvert = attribute.toString();
//do something on valuetoconvert
return valueconverted;
}
@Override
public Object convertToEntityAttribute(String dbData) {
// Object to return with dbData read from DB and modified
return objectconverted
}
}
在 convertToEntityAttribute 中,我尝试使用 Enumeration.valueOf,但此方法需要枚举的 class。我怎样才能找到这个?...如果这是这样做的正确方法。 谢谢
P.S。我发现,谷歌搜索,一些方法倾向于最小化编写的代码,但在每种情况下我都必须为每个枚举写一个 class 。我不想要这个。可能吗?
因此,本质上,您是在询问如何将带注释的 属性 的类型注入到 AttributeConverter
中。恐怕香草 JPA 是不可能的。
如果您使用的是 Hibernate,则可以改用复合用户类型。参见 here,特别是第 4.4 节。 'Type Parameterization'。你最终会得到类似的东西:
@Type(type = "com.example.ConvertibleEnumType", parameters = @Parameter(name = "lookup", value = MyEnum.class))
private MyEnumClass property;
并且您仍然必须严重依赖自定义 ConvertibleEnumType
定义中的反射,但它会起作用 - 您将能够读取 [=14= 中的 lookup
的值].
(TBH 个人,我仍然会考虑每个枚举一个单独的转换器,使用例如 here 描述的方法作为更清洁的解决方案)