基于Spring Data Redis guide,并定义了以下内容:
模型
@RedisHash("positions")
public class Position {
@Id
private String id;
@GeoIndexed
private Point coordinates;
//...
}
连接
@Configuration
public class RedisConfig {
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
return new LettuceConnectionFactory("localhost", 6379);
}
@Bean
public RedisTemplate<String, Position> redisTemplate() {
final RedisTemplate<String, Position> template = new RedisTemplate<String, Position>();
template.setConnectionFactory(lettuceConnectionFactory());
return template;
}
}
我想通过坐标查询位置,这就是我定义以下存储库的原因:
存储库
public interface PositionRepository extends CrudRepository<Position, String> {
List<Position> findByCoordinates(Point point);
//...
}
但调用该方法会产生org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.geo.Point] to type [byte[]]
如何定义/实施该查询?
答案 0 :(得分:0)
您需要使用Near
关键字来表明它是地理查询。
Spring Data从查询方法派生要匹配的属性及其实际匹配模式。有几种匹配模式,默认是精确(简单属性)匹配,方法是将条件与存储值进行比较。
将您的代码更改为
public interface PositionRepository extends CrudRepository<Position, String> {
List<Position> findByCoordinatesNear(Point point);
}
执行地理查询。
当您从存储库角度指定查询方法时,如何对对象进行注释并不是真正相关。
另见: