文档章节

Spring中使用Criteria遇到的问题

Neon_Wang
 Neon_Wang
发布于 2017/06/04 18:51
字数 359
阅读 9
收藏 0
点赞 0
评论 0

很久之前也遇到过一样的问题,发现自己没📈什么记性,果然是好记性不如烂笔头,在此记录下,以免下次再次踩坑。 →。→

创建如下对象:

@Document(collection="Work")
@Data
class Work{
    @Id
    @JsonView(InspectionView.class)
    private String id;
    
    @JsonView(WorkTypeView.class)
    private WorkType workType;

    @JsonView(InspectionView.class)
    private PersonSnapshot personSnapshot;

    @Data
    class PersonSnapshot{

        @JsonView(InspectionView.class)
        private String id;
        
        @JsonView(InspectionView.class)
        private String name;
    }
}

在使用Criteria拼接查询语句中,criteria.and("personSnapshot.id").in(Person.getId());

执行后发现没有查到任何数据,一开始还以为是没有对应的数据,手动去Mongo确认了一下发现并不是这样。

想了很久没什么思路,通过Debug信息输出发现每次执行,personSnapshot.id -> personSnapshot._id

Spring提供的MongoTemplate中,对于属性的处理:

try {

    Field field = createPropertyField(entity, key, mappingContext);
    Entry<String, Object> entry = getMappedObjectForField(field, query.get(key));
    result.put(entry.getKey(), entry.getValue());
} catch (InvalidPersistentPropertyPath invalidPathException) {
    // in case the object has not already been mapped
    if (!(query.get(key) instanceof DBObject)) {
	throw invalidPathException;
    }
    result.put(key, query.get(key));
}

由于急于处理问题,所以没有跟踪的很仔细,但QueryMapper以及其内部类Field中发现存在

private static final List<String> DEFAULT_ID_NAMES = Arrays.asList("id", "_id");
private static final String ID_KEY = "_id";

由此猜测Spring会根据传入的对象映射其属性,对id属性进行默认加“_”操作。

所以尝试着在对象属性中加入@Field("id")注解:

    @Data
    class PersonSnapshot{

        @Field("id")
        @JsonView(InspectionView.class)
        private String id;
        
        @JsonView(InspectionView.class)
        private String name;
    }

结果是令人满意的, 终于找出了问题所在。

© 著作权归作者所有

共有 人打赏支持
Neon_Wang
粉丝 1
博文 5
码字总数 3810
作品 0
杭州
基于 Spring Boot 的研发框架 - SOFABoot

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot ...

匿名 ⋅ 04/19 ⋅ 1

spring声明式事务@Transactional后置,前置处理

想必不少人遇到过这样子的场景,希望在spring的事务完成后do something... 前言: --------------------------------------------------------------------------------------------- 我遇到...

虾几把写 ⋅ 06/12 ⋅ 0

SpringMVC,mybatis,spring整合

需求:使用SpringMVC和mybatis完成商品列表查询 一 整合思路 1 相关jar包(maven) 2 整合dao层 mybatis和springmvc整合,通过spring管理mapper接口 使用mapper的扫描器自动扫描mapper接口在...

Bbigbug ⋅ 04/25 ⋅ 0

Feign使用Hystrix无效原因及解决方法

最近项目重构使用了Spring Boot和Spring Cloud。这两者结合确实给项目带来了方便,同时也遇到了一些问题。其中使用feign作为服务消费,但是断路器hystrix一直不起作用让人很费解。最终经过重...

嘻哈开发者 ⋅ 04/26 ⋅ 0

spring data jpa 详解

本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现...

无敌小学僧 ⋅ 05/30 ⋅ 0

jpa----spring-data-jpa 复杂查询,包括多表关联,分页,排序等

转载:由于此转载文章的出处也是转载的,所以原作者不详 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data...

u010775025 ⋅ 05/29 ⋅ 0

Spring Boot中日志每日分割

问题 想使用Spring Boot中日志输出,这样以后遇到问题,就可以翻看日志数据,看看程序运行的过程,便于排查错误。 logback基础配置 logback-spring.xml application.properties 上面两步,主...

亚林瓜子 ⋅ 06/12 ⋅ 0

Spring MVC 中@autowired 注入后为null

遇到一个很奇怪的问题就是@Autowired注入失败,首先我去检查了该类是否被spring 容器托管 ,发现相应的类已经添加@controller、@service等注解,说明该类已经为Spring类,不存在非spring无法...

huangyunjie ⋅ 05/26 ⋅ 0

Spring 中常用的两种事务配置方式以及事务的传播性、隔离级别

一、注解式事务 1、注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo。 2、事务配置实例 (1)、spring+mybatis 事务配置 (2)、...

哲别0 ⋅ 04/20 ⋅ 0

spring,springmvc有什么区别

想搭建一个项目,打算使用SSM,但是在网上一查发现,不在是spring,struts,mybits,而是spring,spring mvc,mybits, 自己就想尝试搭建一下,但是刚开遇到个问题,spring和springmvc的jar包是一样...

幼龙 ⋅ 2017/04/15 ⋅ 7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部