Как вернуть объект с выбранными столбцами, используя критерии
Я действительно новичок в Hibernate. Я хочу, чтобы List<User>
использовал критерии спящего режима, но только с полями Идентификатор пользователя и имя заполнено. Это возможно? Что-то вроде запроса, показанного ниже:
SELECT user.id, user.name FROM user
С уважением.
Ответы
Ответ 1
Это именно то, для чего предназначены прогнозы. Вот пример:
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("id"), "id")
.add(Projections.property("Name"), "Name"))
.setResultTransformer(Transformers.aliasToBean(User.class));
List<User> list = cr.list();
Фактически, если вы посмотрите на документацию для "lazy property fetching", они специально скажут:
"Другой способ (лучше?), чтобы избежать ненужных чтения столбцов, по крайней мере для транзакций только для чтения - использовать проекционные функции запросов HQL или Criteria. Это позволяет избежать необходимости обработки байтов с использованием времени сборки и, безусловно, является предпочтительным решением."
Кстати, есть связанный с вами вопрос, который вас также может заинтересовать:
Спящий запрос по примерам и проекциям
Ответ 2
Я очень поздно отвечаю на это, но вы можете добавить настраиваемый трансформатор результатов к объекту Query, как показано ниже.
Query query = session
.getNamedQuery(
"someNamedQueryWhichISHQL")
.setString("cod", "10")
.setResultTransformer(new ResultTransformer() {
public Object transformTuple(Object[] row, String[] arg1) {
User usr = new User(row[0],row[1]);
return usr
}
public List transformList(List arg0) {
return arg0;
}
});
return query.list();
Ответ 3
Обычно вы не хотите частично загружать свойства объекта. Но если это необходимо, см. Это:
http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/performance.html#performance-fetching-lazyproperties
Для обычного поведения, подобного сообщению, вы можете использовать запросы сущностей:
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/querysql.html#d0e17633