Создать универсальный конвертер перечисления для JHipster - PullRequest
0 голосов
/ 28 января 2019

У меня есть сущность с элементом типа 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, но этот метод нуждается в классе enum.Как я могу попытаться найти это? ... если это правильный способ сделать это.Спасибо

PS Я нахожу, прибегая к помощи, некоторый подход, направленный на минимизацию написанного кода, но в каждом случае я должен написать один класс для каждого перечисления.И я не хочу этого.Возможно ли это?

1 Ответ

0 голосов
/ 29 января 2019

Итак, по сути, вы спрашиваете, как ввести тип аннотированного свойства в AttributeConverter.Боюсь, что это невозможно с ванильным JPA.

Если вы используете Hibernate, вы можете вместо этого использовать составной тип пользователя.См. здесь , в частности, раздел 4.4.«Параметризация типа».В итоге вы получите что-то вроде:

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

, и вам все равно придется сильно полагаться на отражение в своем пользовательском определении ConvertibleEnumType, но это сработает - вы сможете прочитать значениеlookup внутри setParameterValues.

(лично для ТБХ, я бы по-прежнему рассматривал отдельный конвертер для каждого перечисления, используя, например, подход, описанный здесь , в качестве более чистого решения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...