#spring-boot #jpa #enums #boolean #entity
#весенняя загрузка #jpa #перечисления #логическое #сущность
Вопрос:
Для строк это легко сделать с помощью преобразователя атрибутов. Как найти шаблон для логического значения?
У меня есть перечисление, которое просто
public enum InsuranceStatus
{
Active, Inactive
}
и я хотел бы найти значение enum для логического значения.
Комментарии:
1. Напишите конвертер атрибутов для
AttributeConverter<InsuranceStatus ,Boolean>
Ответ №1:
Если вы не можете изменить перечисление :
public class InsuranceStatusConverter implements AttributeConverter<InsuranceStatus, Boolean> {
@Override
public Boolean convertToDatabaseColumn(InsuranceStatus status) {
return status == InsuranceStatus.Active ? true : false
}
@Override
public InsuranceStatus convertToEntityAttribute(Boolean status) {
return status == true ? InsuranceStatus.Active : InsuranceStatus.Inactive ;
}
}
Если вы можете изменить перечисление, переместите сюда логику настолько, насколько это возможно, потому что модель (перечисление) может использоваться повторно во многих других контекстах, в то время как конвертер предназначен для одного случая :
enum InsuranceStatus {
ACTIVE(true), INACTIVE(false);
private boolean status;
public static InsuranceStatus valueOf(Boolean status){
// Or throw an exception instead of returning null if more appropriate
if (status == null) { return null;}
return status == true ? InsuranceStatus.ACTIVE: InsuranceStatus.INACTIVE;
}
private InsuranceStatus (boolean status) {
this.status = status;
}
public boolean getStatus(){
return status;
}
}
public class InsuranceStatusConverter implements AttributeConverter<InsuranceStatus, Boolean> {
@Override
public Boolean convertToDatabaseColumn(InsuranceStatus status) {
return status.getStatus();
}
@Override
public InsuranceStatus convertToEntityAttribute(Boolean status) {
return InsuranceStatus.valueOf(status);
}
}
Наконец-то обновите свой объект, чтобы использовать этот конвертер :
@Convert(converter = InsuranceStatusConverter.class)
private InsuranceStatus status;
Комментарии:
1. @Rono Действительно, это опечатка. Не стесняйтесь редактировать : )