#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. Это решило бы проблему. Я поддержал ваш ответ, но поскольку я новый участник, он не отображается публично. Большое спасибо!