2

我有一个CrudRepository看起来像这样的:

public interface MyDocumentRepository extends CrudRepository<MyDocument, String> {}

在我的对象 MyDocument 中,我有:

@DynamoDBTable(tableName = "MyDocument ")
public class MyDocument {

   @DynamoDBHashKey
   private String id;

   @DynamoDBAttribute
   private List<String> anotherIds;
   ...
}

我试图通过 id1 获取所有文档,该文档等于 id 和可以包含另一个 ID 的 id2:

List<MyDocument> findAllByIdAndAnotherIdContains(String id, String anotherId);

但这对我不起作用,我收到此错误:

class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')

我尝试了很多方法,但所有方法都返回此错误:

List<MyDocument> findAllByIdAndAnotherIdsContains(String id, List<String> anotherId);
List<MyDocument> findByIdAndAnotherIdsContains(String id, List<String> anotherId);
List<MyDocument> findByIdAndAnotherIdsContains(String id, String anotherId);
List<MyDocument> findByIdAndAnotherIdsContaining(String id, String anotherId);
List<MyDocument> findByIdAndAnotherIdsContaining(String id, List<String> anotherId);

@Query知道没有请我怎么做吗?

4

2 回答 2

1

以下应该有效:

List<MyDocument> findAllByIdAndAnotherIds(String id, List<String> anotherIds);

Containing关键字用于检查字符串,在 SQL 中读作“LIKE % argument %”。

于 2021-09-01T16:11:24.887 回答
1

第一件事。您的实体上有一个类型为 的字段List<String>。这不是您表上的原始列。它至少应该用 注释@ElementCollection。我也看到你错过了@Id

public class MyDocument {
   @Id
   private String id;
   @ElementCollection
   private List<String> anotherIds;
}

然后你可以再试一次

List<MyDocument> findAllByIdAndAnotherIds(String id, String anotherId);

于 2021-09-01T17:53:57.390 回答