我正在使用 Spring Data 通过 MongoRepository 将 POJO 作为文档保存在 MongoDB 中。看起来 Spring 会自动将字段和 getter 持久化到 MongoDB。
总的来说,我希望它只持久化 getter 而从不自动持久化字段。我知道 @Transient 用于一次性注释,但想将其配置为一般行为。
有办法配置吗?
最佳答案
这可以通过编写您自己的自定义转换器来完成。
您在问题中声明 spring data mongodb 持续两者,字段和 setter/getter 。据我所知,只有字段是持久化的。 (参见docu中的11.1:http://docs.spring.io/spring-data/mongodb/docs/1.6.3.RELEASE/reference/html/#mapping-conventions(1.6.3是spring-boot 1.2.6自带的版本,老版本和1.8.0都是一样的))
或者一个简短的例子:
如果你有这样的 Pojo:
@Document
public class MyClass
{
private ObjectId id;
private String foo = "foo";
public String getBar()
{
return "bar";
}
}
和这样的存储库:
public interface MyClassRepository extends MongoRepository<MyClass,ObjectId>
{
}
和这样的应用程序代码:
public static void main(String[] args) throws UnknownHostException
{
ApplicationContext ctx = SpringApplication.run(NewClass.class, args);
MongoTemplate mongoTemplate = ctx.getBean(MongoTemplate.class);
MyClass myClass = new MyClass();
mongoTemplate.save(myClass);
MyClassRepository myClassRepository = ctx.getBean(MyClassRepository.class);
myClassRepository.save(myClass);
}
以下文档被保存(一次由模板保存,然后再次由存储库保存:
{
"_id" : ObjectId("560b97edcb60110890ab7119"),
"_class" : "sandbox.MyClass",
"foo" : "foo"
}
因此,getter 未用于 MyClass 对象的转换。
上面引用的同一文档向您展示了如何编写自己的转换器以及如何将其注册到 MongoTemplate(第 8.10 节)。您可以在此处编写一些代码,使用类中已声明的 getter 并将它们映射到文档的字段。
关于java - 如何禁用 Spring Data MongoDB 文档的字段映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852069/