我有一个springboot项目,我定义了cassandra @Table
以及使用 CassandraRepository
用于操作。我需要在主键中的一个字段中按多个值进行搜索,因此我不能使用任何存储库提供的finder方法。因此,我创造了一个习惯 @Query
方法 IN
条款和 java.util.List
争论。但方法不获取任何数据。我没有得到任何例外,只是没有数据。
下面是示例代码以供解释
@Table("some_table)
Class SomeTable{
@PrimaryKey
Mykey myKey;
@Column("someColumn")
private String someColumn;
}
@PrimaryKeyClass
public class Mykey{
@PrimaryKeyColumn(name = "col_1", type = PrimaryKeyType.PARTITIONED)
private String col_1;
@PrimaryKeyColumn(name = "col_2", type = PrimaryKeyType.CLUSTERED, ordinal = 0)
private String col2;
@PrimaryKeyColumn(name = "some_date", type = PrimaryKeyType.CLUSTERED, ordinal = 1)
private LocalDate somedATE;
}
@Repository
public interface SomeTableRepo extends CassandraRepository<SomeTable, MyKey> {
@Query("Select * from some_table where col_1 in (?0) and col_2 = ?1 and some_date >= ?2 and some_date <= ?3")
List<SomeTable> findAllBySomething(List<String> col1, String col2 , LocalDate startDate, LocalDate endDate);
}
如果我在cassandra workbench上编写查询,它会提供数据
SELECT *
FROM myKeyspc.some_table
WHERE col_1 in ('abcd','etcetc' ) and col2 = 'some' and some_date < '2020-11-01' and some_date > '2020-01-01'
为了确认,如果有任何其他错误,我硬编码了我的 @Query
在 SomeTableRepo
然后我得到数据。例如,下面的作品。
@Repository
public interface SomeTableRepo extends CassandraRepository<SomeTable, MyKey> {
@Query("Select * from some_table where col_1 in ('abcd','etcetc') and col_2 = ?1 and some_date >= ?2 and some_date <= ?3")
List<SomeTable> findAllBySomething(List<String> col1, String col2 , LocalDate startDate, LocalDate endDate);
所以它对in的支持显然不起作用。我做错什么了吗?在卡桑德雷波是不可能的,那么什么是更好的方法呢。我不想给findbyid打多次电话?
暂无答案!
目前还没有任何答案,快来回答吧!