使用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值?
答案 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);
}