В нашем (древнем) проекте мы используем множество запросов на выборку с HQL в Hibernate версии 3.5.6-Final. Поскольку Hibernate будет выполнять автоматическую фиксацию, поскольку он не знает, что это запросы выбора, я переписываю все запросы выбора HQL в запросы Hibernate Criteria, поэтому он не выполняет промежуточные коммиты, когда мы непока не хочу. В большинстве случаев это довольно просто, но в настоящее время я смотрю на такой запрос, и я не уверен, как его преобразовать:
Query query = session.createQuery("select municapilityStreet"
+ " from MunicapilityStreet munStreet, Street street"
+ " where munStreet.id = street.MunicapilityStreet.id"
+ " and street.id = :streetId");
query.setParameter(":streetId", streetId);
MunicapilityStreet result = (MunicapilityStreet) query.uniqueResult();
return result;
Вот что я пока имею впроцесс его преобразования:
Criteria criteria = session.createCriteria(MunicapilityStreet.class);
// No idea what to set here to only get the "municapilityStreet" as result
criteria.setProjection(??);
// I'm not sure if this is correct. With a criteria on a single table it would have been simply "Id".
// Both tables have the column-name Id, and I'm not sure how to differentiate between them.
criteria.add(Restrictions.eq("Street.Id", streetId));
MunicapilityStreet result = (MunicapilityStreet) criteria.uniqueResult();
return result;
Возможно, мне следует создать отдельный вопрос для каждого, но преобразование вышеупомянутого запроса HQL в критерии имеет три момента, которые я не уверен в том, как это сделать:
- Как сделать выборку с несколькими таблицами (часть
from MunicapilityStreet munStreet, Street street
)? - Как получить проекцию, чтобы вернуть только одну таблицу из двух (часть
select municapilityStreet
)? - Как получить равное ограничение на имя столбца одной таблицы, даже если обе таблицы имеют одинаковое имя столбца (часть
and street.id = :streetId
)?