Spring Data Cassandra 1.0.0 を使用しています。私は自分のエンティティを永続化して読み返すことができました。ただし、エンティティの 1 つのフィールドのみを返すクエリを実行したいと考えています。
これは私が試したことです:
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
はCassandraTemplate
インスタンスです。
だから私はテーブルmessage_time
から選ぶだけです。data_message
これはtimestamp
列なのでDate.class
、select()
メソッドに a を渡しますが、これにより次の例外が発生します。
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)
1 つのフィールドだけを照会するにはどうすればよいですか?
PS: このクエリを実行するためのより効率的な方法をご存じでしたら、それもお知らせいただければ幸いです。