如何禁用Spring Data MongoDB文档的字段映射?

时间:2015-09-29 19:14:52

标签: java spring mongodb spring-data

我使用Spring Data通过MongoRepository将POJO作为文档保存在MongoDB中。看起来Spring会自动将两个字段和getter都持久化到MongoDB。

一般来说,我希望它只保留getter并且永远不会自动持久化字段。我知道@Transient的一次性注释,但是想把它配置为一般行为。

有没有办法配置它?

1 个答案:

答案 0 :(得分:0)

可以通过编写自己的自定义转换器来完成。

你在问题​​中说明春天数据mongodb坚持 ,字段和getter。对于我的知识字段是持久的。 (参见文档中的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对象。

上面引用的相同文档向您展示了如何编写自己的Converter以及如何将其注册到MongoTemplate(第8.10节)。您可以在这里编写一些代码,使用类的声明的getter并将它们映射到文档的字段中。