Как я понимаю, HQL использует только имена объектов, имя фраз вместо имени таблицы SQL и поля вместо имени столбца, поэтому у меня есть этот код. И это может применяться как имя столбца таблицы и имя поля. Как это работает? У меня есть таблица с именем «Employee_trip_order», класс отображения «EmployeeTripOrder». Есть поле с именем «число» (в таблице это «порядковый номер»). Таким образом, я могу использовать его как в одном запросе ... Я могу сравнить order_number =: number (используя имя таблицы) и number =: number (используя имя поля). И оба варианта работают отлично. Что это?
Мой код
String[] paramNames = {"number", "year", "id"};
Object[] paramValues = {orderNumber, year, id};
List<AbstractTripOrder> finded = find(
"from " + EmployeeTripOrder.class.getSimpleName() + " where order_number = :number and extract(year from order_date) = :year and id <> :id", paramNames, paramValues);
DAO
public List<T> find(String queryString, String[] parameterNames, Object[] parameterValues) {
HibernateTemplate template = new HibernateTemplate(this.sessionFactory);
return template.findByNamedParam(queryString, parameterNames, parameterValues);
}
Сервис
@Transactional
public List<T> find(String queryString, String[] parameterNames, Object[] parameterValues) {
return this.getRegisterRecordDAO().find(queryString, parameterNames, parameterValues);
}