Я переходил с весенней загрузки 2.0.0 на 2.1.1. После миграции одна из нескольких проблем, с которыми я столкнулся, - это InvalidPersistentPropertyPath для документов с определенными полями и @version. Раньше это работало с Spring boot 2.0.0.
Ниже приведен образец документа, который я хочу сохранить в mongo db:
@Document
@Data
@NoArgsConstructor
public class Report implements Serializable {
@Id
protected String id;
@NotNull
@Field("ReportName")
protected String reportName;
@Field("IA1Value")
private Long iA1Value = 0L;
@Field("IA2Value")
private Long iA2Value = 0L;
@Version
private Long version;
public Report(String reportName) {
this.reportName = reportName;
}
}
Я написал тестовый пример для чтения и сохранения в базе данных mongo.
org.springframework.data.mapping.context.InvalidPersistentPropertyPath: No property 'IA1Value' found on class com.experiments.migration.mongo.Report! Did you mean: IA2Value,IA1Value,iA2Value,iA1Value?
Но если @Version прокомментирован, он работает ....
Я хотел бы знать, какое отношение имеет @Version.
Весь образец находится в:
https://github.com/KencyK/spring-boot-migration
ПРИМЕЧАНИЕ. НЕ НАДО предлагает сохранить имя поля. Потому что я знаю, что это исправит. Я хотел бы знать, почему это работает, если я удалю @Version.
Также я пробовал более старую версию Lombok, которая использовалась в весенней загрузке 2.0.0.
@ErfanAhmed Даже после размещения поля версии выше проблема НЕ исправлена.
iA1Value и iA2Value устанавливаются как 0L, а reportName устанавливаются конструктором. Почему в вашем классе нет метода геттер, сеттер? попробуйте, назначив метод установки геттера для version.
Я использую здесь ломбок. Класс отчета аннотируется @Data, который создает геттеры и сеттеры для всех ваших полей. Я все равно пробовал то, что вы предложили, и, как я ожидал, все еще не работает. Раньше это работало с весенней загрузкой 2.0.0.
попробуйте другой тестовый пример, вместо аннотации @Version используйте аннотацию @Field для поля version. посмотрим, работает это или нет. Если работает, попробуйте добавить обе аннотации.
Удаление @ Version работает, как я уже упоминал ... Но нам нужна @ Version. В любом случае другое предложение также не работает.
попробуйте поместить объявление поля
versionвыше `iA1Value`