首页 > 解决方案 > 如何将布尔数据库值映射到 Java 枚举

问题描述

对于字符串,这很容易使用属性转换器。如何找到布尔值的模式?

我有一个枚举,它只是

public enum InsuranceStatus
{
   Active, Inactive
} 

我想找到一个布尔值的枚举值。

标签: spring-bootjpaenumsbooleanentity

解决方案


如果您无法更改枚举:

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;

推荐阅读