Это можно сделать, написав собственные преобразователи.
Вы указываете в своем вопросе, что данные весны mongodb сохраняются и, поля и геттеры. К моему знанию только поля сохраняются. (См 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";
}
}
и Repository, как это:
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"
}
Таким образом, поглотитель не используется для преобразования объекта MyClass.
В той же документации, что и выше, показано, как написать собственный конвертер и как зарегистрировать его на MongoTemplate (раздел 8.10). Здесь вы можете написать код, который использует объявленные геттеры вашего класса и сопоставляет их с полями вашего документа.
Вы пробовали аннотировать геттер как переходный и сделать поле частным? Это должно работать (как бы оно не противоречиво), если оно реализовано по аналогии с JPA. –
Вообще говоря, все мои поля являются частными, и все они остаются настойчивыми. Я могу пометить собственные поля как @Transient, и это предотвращает его сохранение. Тем не менее, POJO, которые я переношу в MongoDB, как правило, должны только сохраняться из своих геттеров, а частное поле не предназначено для сохранения. Хуже того, я периодически получаю полевые столкновения, когда один класс наследует другой, а частное поле имеет то же имя, что и публичный getter в суперклассе. – DanJ
Вот почему я заявил, что аннотирование геттера вместо частного поля может помочь ... Или я тут что-то не так ... –