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());
}
我目前正在从事需要 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());
}