Конфликт между spring-data-cassandra и spring-data-solr - PullRequest
0 голосов
/ 09 мая 2018

В настоящее время я работаю в проекте, который нуждается в базе данных Cassandra, чтобы иметь возможность поиска. У нас есть кластер DataStax, и мы хотим использовать Spring Data для упрощения операций с базой данных. Однако, когда мы создали сущность, которая получила и - @Table (для Кассандры) и @SolrDocument (для Солра), она оказалась сломанной. Единственная ошибка, которую мы получили, это ошибка ниже. Кто-нибудь сталкивался с такой проблемой?

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

Я знаю, что это, вероятно, проблема Spring, но надеюсь найти кого-то, кто боролся с этим типом проблемы. Привет! * * 1006

Некоторые примеры сущностей, вызывающие проблемы:

@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;
}

1 Ответ

0 голосов
/ 09 мая 2018

Вы путаете вещи - если вы используете DSE Search, то лучше выполнять поиск через CQL, запрашивая в столбце solr_query. В вашем примере @SolrDocument заставит использовать HTTP-API Solr, а @Table заставит использовать CQL.

Вы можете использовать Object Mapper из DataStax для сопоставления классов с таблицами, например:

// 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());
}

Вот полный код .

...