java - Cassandra Spring Data不允许我直接通过复合主键查询数据

标签 java cassandra spring-data composite-key spring-data-cassandra

我正在尝试使用复合主键类来使用 Spring Data Cassandra。但是当我尝试查询数据时出现异常:

org.springframework.data.repository.query.QueryCreationException: **Could not create query for public abstract java.util.List com.amdocs.cassandrapoc.repository.ServiceRepository.findByKey(com.amdocs.cassandrapoc.entities.Key)! Reason: Cannot use composite primary key directly. Reference a property of the composite primary key**

这是我的代码:

@PrimaryKeyClass
public class Key implements Serializable {

   @PrimaryKeyColumn(name = "id", ordinal = 0, type = 
      PrimaryKeyType.PARTITIONED)
   @CassandraType(type = DataType.Name.UUID)
      private UUID id;
   @PrimaryKeyColumn(name = "tenant", ordinal = 1, type = 
      PrimaryKeyType.PARTITIONED)
   @CassandraType(type = DataType.Name.TEXT)
      private String tenant;
  (Equals, hashcode, getters, setters omitted)
}

Table(value = "service")
public class Service implements Serializable {
   @PrimaryKey
   private Key key;

   @Column
   private String value;
   (constructors, setters, getters omitted)
}

@Repository
public interface ServiceRepository extends CassandraRepository<Service, Key> {

    List<Service> findByKey(Key key);

}

这是我创建表的方式(使用嵌入式 Cassandra 和 junit):

@Autowired
private CassandraAdminOperations adminTemplate;
private final String DATA_TABLE_NAME = "service";

@Before
public void createTable() {
    adminTemplate.createTable(
            true, CqlIdentifier.of(DATA_TABLE_NAME),
            Service.class, new HashMap<String, Object>());
}

我做错了什么?

最佳答案

我遇到了同样的问题。我通过以下实现解决了我的问题。

@Repository
public interface ServiceRepository extends CassandraRepository<Service, Key> {

    List<Service> findByKeyIdAndKeyTenant(UUID id, String tenant);

}

关于java - Cassandra Spring Data不允许我直接通过复合主键查询数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50025256/

相关文章:

java - 日期转换jsp

没有nodetool但仅通过java api的cassandra快照

java - GET 始终返回 0 id 值。 Spring数据JPA

java - 如果将 Spring 5.X 的 DefaultCookieSerializer 与 Tomcat 8 一起使用,如何防止创建 JSESSIONID

java - 更好的 Java 方法语法?早归还是晚归?

java - 升级 Spring,现在 Freemarker 抛出 NoSutchMethod 错误

go - cassandra中复合键的二级索引

spring - 使用 Spring Boot 和 MySQL 保存图像

java - 与嵌套 Controller 共享模型

solr - 如何在 cassandra 中选择行以在 solr 中建立索引