我目前正在从事需要Cassandra数据库才具备搜索能力的项目。我们有DataStax集群,我们希望使用Spring Data来简化数据库操作。但是,当我们制作同时获得两者的实体 - @Table
(对于cassandra)和@SolrDocument
(对于Solr)时,它恰好被打破了。我们得到的唯一错误是下面的错误。有人遇到过这样的问题吗?
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type ENTITYNAME!
我知道这可能是春天的问题,但希望能找到一个打过这类问题的人。 问候!
导致问题的一些示例实体:
@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;
}
答案 0 :(得分:1)
您正在混淆事情 - 如果您正在使用DSE搜索,那么通过查询solr_query
列,通过CQL执行搜索会更好。在您的示例中,@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());
}