java - 带有 Spring Data 和 Cassandra @Query 的 IN 子句

标签 java spring cassandra spring-data spring-data-cassandra

我正在尝试使用 IN 子句和来自 Spring Data 的 @Query 注释来查询 Cassandra 表。我有一个分区键为 last_name 和集群键为 first_name 的表。

我有这个查询工作

@Query("SELECT * FROM people WHERE last_name=?0")
public List<People> findByLastName(String lastName);

我想做类似的事情

@Query("SELECT * FROM people WHERE last_name=?0 AND first_name IN ?1")
public List<People> findByLastName(String lastName, String[] firstName);

我用它工作

CassandraOperations.select("SELECT * FROM people WHERE last_name=" + lastName + 
" AND first_name IN (" + concatinatedNameList + ")", People.class);

但出于多种原因(代码风格、测试,我发誓还有更多)我更愿意使用@Query。有什么想法吗?

编辑以获取更多信息!

传入数组、集合或列表返回 Caused by: java.lang.IllegalArgumentException: encountered unsupported query parameter type [class [Ljava.lang.String;] in method public abstract

还试过:

String firstName = "Joe,Jim";
@Query("SELECT * FROM people WHERE last_name=?0 AND first_name IN (?1)")
public List<People> findByLastName(String lastName, String firstName);

未找到任何内容,库将搜索具有连接名称 ('Joe,Jim') 的单个人

String firstName = "'Joe','Jim'";
@Query("SELECT * FROM people WHERE last_name=?0 AND first_name IN (?1)")
public List<People> findByLastName(String lastName, String firstName);

没有找到,请求被转义并结束 ('''Joe'',''Jim''')

String firstName = "Joe','Jim"; // Hoping the library would just add the outer quotes, getting desperate
@Query("SELECT * FROM people WHERE last_name=?0 AND first_name IN (?1)")
public List<People> findByLastName(String lastName, String firstName);

没有找到,请求被转义并结束 ('Joe'',''Jim')

最佳答案

更新

在目前的 Spring ,它似乎可以在没有牙套的情况下工作。


旧答案

在使用 IN 时,您必须使用护腕。

@Query("SELECT * FROM people WHERE last_name=?0 AND first_name IN (?1)")
public List<People> findByLastName(String lastName, String[] firstName);

但是您的代码中还有其他一些问题。我将它们全部更改为如下所示的良好编码标准。包括我个人最喜欢使用命名参数。

@Query("SELECT p FROM People p WHERE p.lastName = :lastName AND p.firstName IN (:firstNames)")
public List<People> findByName(@Param("lastName") String lastName, @Param("firstNames") String[] firstNames);

关于java - 带有 Spring Data 和 Cassandra @Query 的 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29418075/

相关文章:

bash - 从命令行运行 cassandra 查询

java - 向 Spring PetClinic 添加新方面

java - 在MySql数据库中创建表时,遇到NullPointerException

java - 连字符混合单词的正则表达式

java - 如何使用 Hibernate 保留枚举类型字段?

java - 未找到此类 Bean 定义 - 异常

java - 请求的资源在 Spring MVC 中不可用

database - 如果 Cassandra 节点在压缩期间用完磁盘空间会怎样?

java - 如何删除窗口框架中的 AWT 标签

java - Cassandra部署集群失败