我有一个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?),它将根据类中的字段名称或 @Field
Annotation调用java(Entity)类的setter / constructors方法 . 但令我惊讶的是,从未调用过二传手 . 仅调用默认构造函数 .
那么字段是如何设置的?我问的原因是如果调用setter,它会给我一个设置其他字段的选项 .
谢谢
2 回答
Spring在它下面的后续层有一个实体转换器 . 它使用反射来读取字段,变量和签名的类型 . 转换逻辑对于所有数据存储库都是通用的 . 你可以阅读相同的here
你也可以介绍一个自定义转换器,无论是你自己还是 Jackson ,它的一个例子是here
Spring Data默认为字段访问,因为访问器方法可以包含我们实际想要的其他逻辑,您可以通过使用
@AccessType(Type.PROPERTY)
注释您的类来切换到属性访问 .