首页 > 解决方案 > 按主键查找所有

问题描述

我有一个卡桑德拉表:

PK 钥匙 价值
pk_1 key_1 值_1
pk_1 key_2 价值_2
pk_1 key_3 值_3

其中pkkey形成一个复合键(pk是分区键,key是集群)。

我想通过使用 Spring JPA 来检索所有key-value对以获得结果。pkMap<String, String>

我尝试过以下方法:

public interface MyRepository extends CassandraRepository<MyEntity, MyEntityCompoundKey> {
    @Query("SELECT key, value FROM my_table WHERE pk='?0'")
    Map<String, String> getAll(String pk);

    // other crud methods
}

但是,当使用它pk_1作为参数调用它时,我收到以下错误:

org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 3

我该如何解决?是否有更好的方法来仅通过主键检索元素?

编辑

@Table
public class MyEntity {

    @PrimaryKey
    pribate MyEntityCompoundKey key;
    
    @CassandraType(type = Name.Text)
    private String value;
}

@PrimaryKeyClass
public class MyEntityCompoundKey {
  
    @PrimaryKeyColumn(name = "pk", type= PARTITIONED)
    private String pk;

    @PrimaryKeyColumn(name = "key", type = CLUSTERED)
    private String key;
}

标签: springspring-bootcassandraspring-data-jpa

解决方案


您可以在存储库中编写带有签名的方法

public interface MyRepository extends CassandraRepository<MyEntity, MyEntityCompoundKey> {
    List<MyEntity> findByKeyPk(String pk)
}
    

这将由 spring 自动实现并做你想做的事情。


推荐阅读