Spring Cassandra转换器:将Null Boolean对象转换为False
Spring Cassandra 2.0.1.RELEASE: 将Null Boolean字段转换为False的解决方案
我来帮你完成这个自定义转换器的实现,让Cassandra中为Null的isPermanant字段自动映射成Java实体里的false值。
先完善你的实体类
首先你的Employee实体需要补充必要的构造方法和getter,不然Spring Data Cassandra没法正常实例化和访问字段:
@Table("employee") public class Employee implements Serializable { private static final long serialVersionUID = -3723276354723269571L; @PrimaryKey private final String id; @Column private final Boolean isPermanant; // Spring Data Cassandra需要全参构造来实例化对象 public Employee(String id, Boolean isPermanant) { this.id = id; this.isPermanant = isPermanant; } // Getter方法 public String getId() { return id; } public Boolean getIsPermanant() { return isPermanant; } }
编写自定义转换器
我们需要两个转换器:一个处理从数据库读数据到实体(把Null转成false),另一个处理从实体写数据到数据库(可按需调整逻辑)。
核心读取转换器
这个转换器会在Cassandra返回Null时,自动替换成false:
import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; @ReadingConverter public class NullBooleanToFalseConverter implements Converter<Boolean, Boolean> { @Override public Boolean convert(Boolean source) { // 数据库值为Null时返回false,否则返回原布尔值 return source != null ? source : false; } }
可选写入转换器
如果你需要把Java里的false转成Null存入数据库,可以修改这个转换器的逻辑,这里先保持默认写入原值:
import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.WritingConverter; @WritingConverter public class BooleanToCassandraBooleanConverter implements Converter<Boolean, Boolean> { @Override public Boolean convert(Boolean source) { // 若要将false存为Null,可修改为:return source != null && source ? source : null; return source; } }
注册转换器到Spring容器
把这两个转换器配置成CassandraCustomConversions Bean,Spring Data Cassandra就会自动使用它们:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.cassandra.core.convert.CassandraCustomConversions; import java.util.Arrays; @Configuration public class CassandraConfig { @Bean public CassandraCustomConversions cassandraCustomConversions() { return new CassandraCustomConversions( Arrays.asList( new NullBooleanToFalseConverter(), new BooleanToCassandraBooleanConverter() ) ); } }
关键说明
@ReadingConverter:标记这是读取数据库数据到实体时触发的转换器@WritingConverter:标记这是实体数据写入数据库时触发的转换器- 配置完成后,查询
Employee时,若数据库中isPermanant为Null,实体属性会自动变成false;写入逻辑则完全按照你定义的规则执行。
内容的提问来源于stack exchange,提问作者Patan
相关产品推荐
相关产品推荐

