gpt4 book ai didi

spring - 在 springdata-cassandra 中将 null 读取为空集

转载 作者:行者123 更新时间:2023-12-05 05:15:20 25 4
gpt4 key购买 nike

我使用 spring-data-cassandra,并且有这样的实体:

@Table("users")
public class User {

@Column("permissions")
@CassandraType(type = DataType.Name.SET, typeArguments = {DataType.Name.TEXT})
public Set<String> permissions = new HashSet<>();
}

在 cassandra 中,我有表 users,其字段 permissions 类型为 Set。当我在集合中存储一些值时它工作正常,但是当我尝试存储空集时,当我从存储库中读取此类实体时它变为 null

有没有办法强制 spring-data-cassandra 将 null 更改为空 HashSet?或者我可以以某种方式为实体的这个特定属性添加自定义阅读器吗?

最佳答案

TL;DR;

这是 Cassandra 的默认行为,即为空的 Collection 和 Map 类型的列返回 null

进一步阅读

Cassandra 为不包含任何项的列表、集合和映射返回 null 值。如您的问题所示,当使用具有预初始化字段的类时,这尤其不幸。问题跟踪器中有一张公开票 ( DATACASS-266 - Loading empty collection-typed properties overwrites pre-initialized fields ) - 截至目前,没有评论或投票。

我们不确定在处理空 (null) 集合时跳过设置属性或应用某种默认设置是否是个好主意,因为这会引发后续问题:

  • 通过构造函数创建实例:在这种情况下需要一个值。对于属性访问,我们可以省略设置属性,对于构造函数创建,我们必须提供一个值。
  • 预初始化集合包含项目,但从 Cassandra 收到的项目是 null
  • 我们假设,将应用更改,假设空集合默认为 null 的现有代码会发生什么。

解决此行为的一种可能性是在 MappingCassandraConverter 上进行配置或覆盖一个扩展点,以便用户可以应用他们自己的空集合行为。

关于spring - 在 springdata-cassandra 中将 null 读取为空集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com