为JHipster创建一个通用的枚举转换器

时间:2019-01-28 10:08:28

标签: java hibernate jpa enums jhipster

我有一个实体,其元素类型为enum:

@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,但是此方法需要枚举类。我如何尝试找到它?...如果这是正确的方法。 谢谢

P.S。谷歌搜索,我发现有一些方法倾向于使编写的代码最小化,但是在每种情况下,我都必须为每个枚举编写一个类。我不想要这个。有可能吗?

1 个答案:

答案 0 :(得分:1)

因此,从本质上讲,您在问如何将带注释的属性的类型注入到AttributeConverter中。恐怕使用香草JPA是不可能的。

如果您使用的是Hibernate,则可以使用复合用户类型。参见here,特别是第4.4节。 “类型参数化”。您最终会得到类似:

@Type(type = "com.example.ConvertibleEnumType", parameters = @Parameter(name = "lookup", value = MyEnum.class))
private MyEnumClass property;

,您仍然必须严重依赖自定义ConvertibleEnumType定义内的反射,但是它可以工作-您将能够读取lookup内的setParameterValues的值。

(TBH个人而言,我仍将每个枚举都使用一个单独的转换器,例如使用here所述的方法,作为更清洁的解决方案)