Как вернуть сущность с выбранными столбцами, используя Критерии - PullRequest
28 голосов
/ 04 июня 2009

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

SELECT user.id, user.name FROM user

Привет.

Ответы [ 3 ]

56 голосов
/ 05 июня 2009

Это именно то, для чего нужны прогнозы. Вот пример:

  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();

На самом деле, если вы посмотрите на документацию для "отложенной выборки свойств", они специально скажут:


"Другой (лучший?) Способ избежать ненужного чтения столбцов, по крайней мере для транзакций только для чтения, состоит в использовании функций проекции запросов HQL или Criteria. Это позволяет избежать необходимости обработки байт-кода во время сборки и, безусловно, является предпочтительным решением. . "


Кстати, есть связанный вопрос, который вас также может заинтересовать: Запрос гибернации по примерам и проекциям

3 голосов
/ 10 февраля 2014

Я очень поздно отвечаю на это, но вы можете добавить собственный преобразователь результатов к объекту 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();
1 голос
/ 04 июня 2009

Как правило, вы не хотите частично загружать свойства объекта. Но если вам нужно, посмотрите это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...