【问题标题】:Create a generic enumeration converter for JHipster为 JHipster 创建一个通用枚举转换器
【发布时间】:2019-06-21 07:34:45
【问题描述】:

我有一个带有枚举类型元素的实体:

@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,但是这个方法需要枚举类。我怎样才能找到这个?...如果这是正确的方法。 谢谢

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

【问题讨论】:

    标签: java hibernate jpa enums jhipster


    【解决方案1】:

    因此,本质上,您是在问如何将带注释属性的类型注入AttributeConverter。恐怕香草 JPA 不可能做到这一点。

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

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

    您仍然必须在自定义 ConvertibleEnumType 定义中大量依赖反射,但它会起作用 - 您将能够在 setParameterValues 中读取 lookup 的值。

    (TBH 个人,我仍然会考虑为每个枚举使用一个单独的转换器,例如使用 here 描述的方法,作为更清洁的解决方案)

    【讨论】:

    • 好主意。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多