文档章节

Spring中使用Criteria遇到的问题

Neon_Wang
 Neon_Wang
发布于 2017/06/04 18:51
字数 359
阅读 17
收藏 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
杭州
Hibernate 的三种查询方式:HQL、Criteria、Sql

第一种方式:HQL(Hibernate Query Languge,Hibernate 查询语言)查询 是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式 语法:[se...

风中帆
2014/06/18
0
0
Spring boot 中自定义JpaRepository使用

普通JpaRepository类 JpaRepository一般的筛选查询,均可以通过的形式解决,总的很好用,但是总有一部分的业务查询是需要JpaRepository不能解决的。这个时候,就需要在此基础上面增加自定义的...

亚林瓜子
08/10
0
0
转升级hibernate>4,spring>3.1笔记

看着hibernate和spring的RELEASE版出来很久了.心痒就想升级一下.结果问题真来的不少 ...记录下来. spring升到3.1倒是简单,删除旧包,加新包,然后配置的 xsi:schemaLocation 版本由 3.0 改写成...

提广乾
2015/02/03
0
0
深入浅出学Spring Data JPA

第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算...

John-HZ
2014/06/08
0
0
Spring Mongodb入门

安装Spring for Mongodb Spring项目为方便对Mongodb的操作,建立了spring-data的子项目,地址在: http://www.springsource.org/spring-data/mongodb,目前版本是1.0.0M2阶段,已支持对Mongo...

李长春
2011/11/14
0
2

没有更多内容

加载失败,请刷新页面

加载更多

20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
1
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
16
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部