Есть ли способ избежать явной записи полей документа в виде строк в запросах Spring Data MongoDB?

#spring-data-mongodb

#spring-data-mongodb

Вопрос:

Недавно я начал использовать Spring Data MongoDB, и мне интересно, есть ли какой-либо способ избежать явной записи атрибутов объектов, поскольку они хранятся в базе данных. Например, учитывая следующий класс, представляющий коллекцию MongoDB:

 public class Employee {

  @Id
  public String id;
  
  private double salary;

  ...
}
  

Если я хочу выполнить запрос с использованием MongoTemplate, например:

 public List findEmployeeBySalaryRange(double salary) {
        Query query = new Query();
        query.addCriteria(Criteria.where("salary").lt(salary));
        ...
}
  

Я бы хотел избежать записи "salary" , поскольку это усложнит поддержку кода в будущем в случае изменения имени поля. Я думаю о чем-то вроде получения имени поля из атрибута class, но я не совсем уверен, как это сделать. Есть ли способ сделать это? Я просмотрел документацию, но не нашел ничего связанного, если только я не пропустил это.

Заранее спасибо.

Ответ №1:

Вы можете создать служебный класс для хранения всех имен полей базы данных, использовать @Field аннотацию к полю с константой из этого класса и использовать эту константу в запросе, чтобы избежать подверженных ошибкам жестко закодированных строк.

В модели сотрудника

 @Field(DbFields.SALARY)
private double salary;
  

В запросе,

 query.addCriteria(Criteria.where(DbFields.SALARY).lt(salary));
  

В служебном классе DbFields

 public static final String SALARY = "salary";
  

Комментарии:

1. Это решило бы проблему. Я поддержал ваш ответ, но поскольку я новый участник, он не отображается публично. Большое спасибо!