Получение меньше столбцов с Hibernate - PullRequest
5 голосов
/ 01 апреля 2010

У меня есть таблица с 11 столбцами, но мне нужно получить только 2 из них в моем приложении, я использую комбинацию Spring / Hibernate / DAO. На данный момент у меня есть класс домена, который включает в себя все 11 полей, и файл отображения, который отображает все 11 столбцов в таблице. Как использовать получить только 2 из них не все?

Ответы [ 3 ]

11 голосов
/ 01 апреля 2010

Или:

  1. Использовать проекции - Pro: нечего добавить - Con: не типобезопасен (в результате получается List строк, где каждая строка представляет собой Object[]):

    select f.foo, f.bar from FatEntity f
    
  2. Использовать выражение конструктора в предложении SELECT (указанный класс не обязательно должен быть сущностью или отображаться в базу данных) - Pro: typesafe solution - Con: Больше классов, если вы не используете повторно FatEntity в качестве держателя, в этом случае многие поля будут null:

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
    

    Обратите внимание, что если имя класса сущности указано в предложении SELECT NEW, результирующие экземпляры сущности находятся в состоянии new (без постоянной идентичности).

  3. Используйте другую сущность, сопоставленную с той же таблицей только с обязательными полями - Pro: это реальная сущность, которую вы можете изменять и обновлять - Con: More classes.

    from LightEntity
    

Основные различия между № 2 и № 3:

  • 2 вовсе не требует, чтобы держатель был юридическим лицом.

  • держатель в # 2 может быть сущностью, сопоставленной с другим столом.
  • если # 2 возвращает сущности, они находятся в новом состоянии (это может быть проблемой или нет).
6 голосов
/ 01 апреля 2010

Попробуйте:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity

Вы даже можете сделать:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity

, чтобы получить список описаний сущностей.

2 голосов
/ 01 апреля 2010

Если вам никогда не требуется больше, чем эти 2 столбца таблицы, вы можете изменить отображение в режиме гибернации, чтобы отображать только эти 2 необходимых столбца в класс сущности. Отобразите только те столбцы таблицы, к которым вы хотите получить доступ в своем приложении. Имейте в виду, что ограничения базы данных для «игнорируемых» столбцов могут быть нарушены, например, ограничения не равны NULL, внешние ключи или уникальные ограничения.

...