spring-boot - 如何将布尔数据库值映射到 Java 枚举
问题描述
对于字符串,这很容易使用属性转换器。如何找到布尔值的模式?
我有一个枚举,它只是
public enum InsuranceStatus
{
Active, Inactive
}
我想找到一个布尔值的枚举值。
解决方案
如果您无法更改枚举:
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;
推荐阅读
- python - json.dump(): TypeError: 'time' 类型的对象不是 JSON 可序列化的
- azure-service-fabric - Service Fabric EntryPointType="Setup" 不同的 SystemGroup 本地化
- javascript - HTML 画布在全屏尺寸上变得模糊
- c# - c# XML序列化-动态元素名称
- firebase - 在 Flutter 中访问 Firebase 存储
- python - 如何在 qt 小部件中显示 matplotlib.pyplot?
- c++ - 将 Arduino 草图重构为 C++ 类
- python - 在 Windows 中导入 Linux 中生成的 .so 文件
- graphql - 错误:预期 [object Object] 是 GraphQL 类型
- angular - 获取 HTTP 请求的结果时如何强制转换对象