Sto usando Spring Data Cassandra 1.0.0. Sono riuscito a persistere e rileggere la mia entità. Tuttavia, ora voglio fare una query che restituisce solo 1 campo dell'entità.Come richiedere solo 1 campo con Spring Data Cassandra?
Questo è quello che ho provato:
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
è un'istanza CassandraTemplate
.
Quindi seleziono solo message_time
dalla tabella data_message
. Si tratta di una colonna di timestamp
, così mi passa in un Date.class
al metodo select()
, ma questo dà la seguente eccezione:
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)
Come devo eseguire una query per solo 1 campo?
PS: Se vuoi conoscere un modo più performante per fare questa domanda, sarei felice di sentirlo anche.
Sentiti libero di contrassegnare la risposta come risolta. – Ztyx
Questo è corretto. –
Cassandra Operations ha un metodo ---- cassandraOperations.selectOne (statement.toString(), ABC.class), possiamo usare anche questo – denzal