加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring Data Cassandra:如何使用复合键查询表?

发布时间:2020-12-15 04:39:13 所属栏目:Java 来源:网络整理
导读:我有以下列族: @Table(value = "request_event")public class RequestEvent { @PrimaryKeyColumn(name = "day_requested",ordinal = 0,type = PrimaryKeyType.PARTITIONED) private LocalDate dayRequested; @PrimaryKeyColumn(name = "date_requested",ord
我有以下列族:

@Table(value = "request_event")
public class RequestEvent {

    @PrimaryKeyColumn(name = "day_requested",ordinal = 0,type = PrimaryKeyType.PARTITIONED)
    private LocalDate dayRequested;

    @PrimaryKeyColumn(name = "date_requested",ordinal = 1,type = PrimaryKeyType.CLUSTERED,ordering = Ordering.DESCENDING)
    private LocalDateTime dateRequested;

    ...
}

由存储库存储和访问:

@Repository
public interface RequestEventRepository extends CrudRepository<RequestEvent,LocalDateTime> {
}

不幸的是,requestEventRepository.findOne(localDate)抛出一个异常,可能是因为它返回了多个结果.我怎样才能解决这个问题?此外,如何检索特定日期的所有结果?

解决方法

您有两个选项来表示Spring Data Cassandra的复合键:

>在域类型中使用@PrimaryKeyColumn(就像你一样).
>使用@PrimaryKeyClass表示主键并将其嵌入域类型中.

Spring Data存储库接受单个ID类型.因此,不可能只将LocalDateTime声明为id.如果要在域类型中坚持@PrimaryKeyColumn,请使用MapId作为id类型:

@Table(value = "request_event")
public class RequestEvent {

    @PrimaryKeyColumn(name = "day_requested",type = PrimaryKeyType.PARTITIONED) 
    private LocalDate dayRequested;

    @PrimaryKeyColumn(name = "date_requested",ordering = Ordering.DESCENDING) 
    private LocalDateTime dateRequested;

}

public interface RequestEventRepository extends CrudRepository<RequestEvent,MapId> {}

MapId mapId = BasicMapId.id("dayRequested",…).with("dateRequested",…);

RequestEvent loaded = eventRepository.findOne(mapId);

如果您决定将主键表示为值对象,则需要稍微调整域类型:

@PrimaryKeyClass
public class Key implements Serializable {

    @PrimaryKeyColumn(name = "day_requested",ordering = Ordering.DESCENDING) 
    private LocalDateTime dateRequested;

}

@Table(value = "request_event")
public class RequestEvent {

    @PrimaryKey 
    private Key key;

}

public interface RequestEventRepository extends CrudRepository<RequestEvent,Key> {}

eventRepository.findOne(new Key(…))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读