我有一个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,它会给我一个选项来设置其他字段。
由于
答案 0 :(得分:2)
Spring Data默认为字段访问,因为访问者方法可以包含我们不想意外触发的其他逻辑。如果这是你真正想要的,你可以通过用@AccessType(Type.PROPERTY)
注释你的班级来切换到属性访问。
答案 1 :(得分:1)
Spring在它下面的后续层有一个实体转换器。它使用反射来读取字段,变量和签名的类型。转换逻辑对于所有数据存储库都是通用的。您可以阅读相同的here
你也可以介绍一个自定义转换器,无论是你自己还是杰克逊,它的一个例子是here
答案 2 :(得分:0)
看看MappingMongoConverter类-它具有完成所有这些操作的逻辑。