使用Spring中的CrudRepositoty保存具有NULL值的实体

时间:2016-08-17 21:05:52

标签: spring spring-boot cassandra

使用Spring Boot,Cassandra,org.springframework.data.repository.CrudRepository作为保存实体。

我有下一个实体:

@Table("user")
public class User implements Serializable {
    @PrimaryKey
    private UUID id;
    private String name;
...
}

存储库:

public interface UserRepository extends CrudRepository<User, UUID> {}

保存实体:

user.setName(null);
userRepository.save(user);

CrudRepository不会将具有NULL值的属性写入数据库,因为

if (value != null) {
                    log.debug(String.format("Adding insert.value [%s] - [%s]", prop.getColumnName().toCql(), value));
                    insert.value(prop.getColumnName().toCql(), value);
                }

在MappingCassandraConverter.java

有没有办法使用CrudRepository保存NULL值?

2 个答案:

答案 0 :(得分:3)

它定于6月28日。 看看下面的网址 https://github.com/spring-projects/spring-data-cassandra/pull/72

  

我们现在支持删除具有空值的属性的列   通过在Insert和Update语句中写入空值   MappingCassandraConverter。对象与所有持久性一起存储   属性。插入和更新不再执行条件插入   非空值但考虑所有值。

目前的版本是

<version>1.4.2.RELEASE</version>

然而我认为这一变化正在进行中

<version>1.5.0.BUILD-SNAPSHOT</version>

您可以等待下一次正式发布,也可以转到此网址 http://projects.spring.io/spring-data-cassandra/#quick-start 并在下载选项旁边的下拉菜单中,而不是1.4.2 1.5.0快照。如果系统正在生产中,我会建议您等待下一次正式发布。

希望这有帮助

答案 1 :(得分:1)

我正在使用 1.5.3.RELEASE ,但问题仍然存在。

if (value == null) {
    return;
}

if (log.isDebugEnabled()) {
    log.debug("Adding insert.value [{}] - [{}]", property.getColumnName().toCql(), value);
}