Подтвердить что ты не робот

Как вернуть объект с выбранными столбцами, используя критерии

Я действительно новичок в Hibernate. Я хочу, чтобы List<User> использовал критерии спящего режима, но только с полями Идентификатор пользователя и имя заполнено. Это возможно? Что-то вроде запроса, показанного ниже:

SELECT user.id, user.name FROM user

С уважением.

4b9b3361

Ответ 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