簡體   English   中英

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

[英]How do I disable mapping of fields for Spring Data MongoDB documents?

我使用Spring Data通過MongoRepository將POJO作為文檔保存在MongoDB中。 看起來Spring會自動將字段和getter都持久化到MongoDB。

一般來說,我希望它只保留getter並且永遠不會自動持久化字段。 我知道@Transient的一次性注釋,但是想將其配置為一般行為。

有沒有辦法配置這個?

可以通過編寫自己的自定義轉換器來完成。

你用你的問題春天MongoDB的數據堅持,字段和getter。 對於我的knowlegde, 只有字段是持久的。 (見實況11.1: http://docs.spring.io/spring-data/mongodb/docs/1.6.3.RELEASE/reference/html/#mapping-conventions (1.6.3是彈簧附帶的版本啟動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並將它們映射到文檔的字段中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM