Ich verwende Spring Data Cassandra 1.0.0. Ich habe es geschafft, zu bestehen und meine Entität zurückzulesen. Jetzt möchte ich jedoch eine Abfrage ausführen, die nur 1 Feld der Entität zurückgibt. DieseWie für nur 1 Feld mit Spring Data Cassandra abfragen?
ist, was ich habe versucht:
public Optional<DateTime> getTimeOfOldestIntervalTrafficDataMessage(MessageSource messageSource, IntegrationPeriod integrationPeriod, TrafficDataType trafficDataType)
{
Select select = QueryBuilder.select("message_time").from("messages", "data_message");
select.where(QueryBuilder.eq("message_source_id", messageSource.getId().getId()))
.and(QueryBuilder.eq("data_type", trafficDataType.name()))
.and(QueryBuilder.eq("integration_period", integrationPeriod.name()));
List<Date> result = cassandraOperations.select(select, Date.class);
if (result.size() > 0)
{
return Optional.of(new DateTime(FluentIterable.from(result).toSortedSet(Ordering.natural()).first()));
}
else
{
return Optional.absent();
}
}
cassandraOperations
ist eine CassandraTemplate
Instanz.
Also ich wähle nur message_time
aus der Tabelle. Dies ist eine timestamp
Spalte, so gebe ich in einem Date.class
zum select()
Methode, aber das gibt die folgende Ausnahme:
org.springframework.data.mapping.model.MappingException: No mapping metadata found for java.util.Date
at org.springframework.data.cassandra.convert.MappingCassandraConverter.readRow(MappingCassandraConverter.java:111)
at org.springframework.data.cassandra.convert.MappingCassandraConverter.read(MappingCassandraConverter.java:202)
at org.springframework.data.cassandra.core.CassandraConverterRowCallback.doWith(CassandraConverterRowCallback.java:47)
at org.springframework.data.cassandra.core.CassandraTemplate.select(CassandraTemplate.java:455)
at org.springframework.data.cassandra.core.CassandraTemplate.select(CassandraTemplate.java:253)
at com.mycomp.app.infrastructure.cassandra.CassandraMessageRepository.getTimeOfOldestIntervalTrafficDataMessage(CassandraMessageRepository.java:130)
Wie soll ich für nur 1 Feld abfragen?
PS: Wenn Sie eine leistungsfähigere Möglichkeit kennen würden, diese Abfrage durchzuführen, würde ich mich freuen, sie auch zu hören.
Fühlen Sie sich frei, Sie als Antwort zu markieren. – Ztyx
Das ist richtig. –
Cassandra Operations hat eine Methode ---- cassandraOperations.selectOne (statement.toString(), ABC.class), wir können das auch verwenden – denzal