Как сопоставить логическое значение базы данных с перечислением Java

#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 Действительно, это опечатка. Не стесняйтесь редактировать : )