Spring Data MongoDB如何在实体上设置字段?

时间:2016-12-08 00:11:11

标签: mongodb spring-data spring-data-mongodb

我有一个MongoRepository类

public interface UserRepository extends MongoRepository<User, Long> {

  User findById(Long id);
}

和我的实体pojo看起来像这样

@Document(collection = "user")
class User {

  Long id;
  String name;
  Department department;
  …
}

当我调用findBy方法时,返回一个User对象。我想知道Spring Data MongoDB如何将DBObject转换为Java对象。我的印象是Spring Data MongoDB使用某种映射器(Jackson?),它将根据类中的字段名称调用java(Entity)类的setter / constructors方法或@Field注释。但令我惊讶的是,从未调用过setter。只调用默认构造函数。

然后如何设置字段?我问的原因是如果调用setter,它会给我一个选项来设置其他字段。

由于

3 个答案:

答案 0 :(得分:2)

Spring Data默认为字段访问,因为访问者方法可以包含我们不想意外触发的其他逻辑。如果这是你真正想要的,你可以通过用@AccessType(Type.PROPERTY)注释你的班级来切换到属性访问。

答案 1 :(得分:1)

Spring在它下面的后续层有一个实体转换器。它使用反射来读取字段,变量和签名的类型。转换逻辑对于所有数据存储库都是通用的。您可以阅读相同的here

你也可以介绍一个自定义转换器,无论是你自己还是杰克逊,它的一个例子是here

答案 2 :(得分:0)

看看MappingMongoConverter类-它具有完成所有这些操作的逻辑。