【问题标题】:Cassandra ignores updating null value spring bootCassandra 忽略更新空值 spring boot
【发布时间】:2021-04-19 13:15:11
【问题描述】:

我正在使用 Spring Boot 2.4.1spring-boot-starter-data-cassandra

这里是存储库类

@Repository
public interface UserRepository extends CassandraRepository<UserModel, String> {

}

下面是POJO

@Table("user")
public class UserModel {

    @PrimaryKeyColumn(name = "userid", type = PrimaryKeyType.PARTITIONED)
    private String userId;

    @Column("emailid")
    private String emailId;

    @Column("phonenumber")
    private String phoneNumber;

    //getters and setters
    }

这里是调用更新方法的类:

@Component
public class UpdateTask {

    @Autowired
    private UserRepository userRepository;

    public void removePhoneNumber(UserModel t) {
        t.setPhoneNumber(null);
        userRepository.save(t);
    }

}

问题是我想将电话号码字段更新为null,因为用户想删除他们的电话号码。但是 cassandra 忽略了 null 值集。如何在 cassandra 中将值显式设置为 null ?

【问题讨论】:

  • 你找到解决办法了吗?

标签: java spring spring-boot cassandra


【解决方案1】:

可以使用 DELETE cql 命令完成 - 如果 INSERT 语句仅为列指定 NULL 值或未为列指定任何值,则驱动程序在执行 INSERT 语句时忽略该列 你可以参考这个https://issues.apache.org/jira/browse/CASSANDRA-3783

【讨论】:

    【解决方案2】:

    试试这个:

        public void removePhoneNumber(UserModel t) {
            UserModel userModelToUpdate = userRepository.getOne(t.userId);
            userModelToUpdate.setPhoneNumber(null);
            userRepository.save(userModelToUpdate);
        }
    
    
    

    【讨论】:

    • 为什么?这有什么不同?为什么你会期待不同的结果?
    • @SotiriosDelimanolis,这对你有用吗?
    • 我不是 OP。没有解释的代码转储没有用。
    • @SotiriosDelimanolis 我会用解释向你解释,但首先,让我知道这是否有效?
    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 2015-11-04
    • 2021-08-12
    • 2016-09-04
    • 1970-01-01
    • 2019-03-29
    • 2020-10-14
    • 2017-05-04
    相关资源
    最近更新 更多