spring-data-cassandra 和 spring-data-solr 之间的冲突

Conflict between spring-data-cassandra and spring-data-solr

我目前正在从事需要 Cassandra 数据库具有搜索功能的项目。我们有 DataStax 集群,我们想使用 Spring 数据来简化数据库操作。然而,当我们制作同时获得 @Table(对于 cassandra)和 @SolrDocument(对于 Solr)的实体时,它碰巧被破坏了。我们得到的唯一错误是下面的错误。有人遇到过这样的问题吗?

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type ENTITYNAME!

我知道这可能是 Spring 问题,但希望能找到解决此类问题的人。 您好!

导致问题的一些示例实体:

@SolrDocument(solrCoreName = "sample_entity")
@Table("sample_entity")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public final class SampleEntity {

    @PrimaryKey
    @Indexed(name = "id")
    private UUID id;

    private LocalDateTime created;

    private UUID foreignId;

    @Indexed(name = "name")
    private String name;

    private boolean someflag = true;
}

您搞混了 - 如果您使用 DSE 搜索,那么最好通过 CQL 执行搜索,方法是在 solr_query 列中查询。在您的示例中,@SolrDocument 将强制使用 Solr 的 HTTP API,而 @Table 将强制使用 CQL。

您可以使用 DataStax 中的 Object Mapper 将 类 映射到表,如下所示:

// STest.java
@Table(keyspace = "test",name = "stest")
  public class STest {
    @PartitionKey
    private int id;
    private String t;
}

// STestAccessor.java
@Accessor
public interface STestAccessor {
    @Query("SELECT * FROM test.stest WHERE solr_query = :solr")

    Result<STest> getViaSolr(@Param("solr") String solr);
}

// STestMain.java
MappingManager manager = new MappingManager(session);

STestAccessor sa = manager.createAccessor(STestAccessor.class);
Result<STest> rs = sa.getViaSolr("*:*");

for (STest sTest : rs) {
    System.out.println("id=" + sTest.getId() + ", text=" + sTest.getT());
}

Here is the full code.