Опрос моего провайдера JPA (Hibernate) для коллекциисущности - PullRequest
0 голосов
/ 20 февраля 2011


У меня есть объект, который выглядит примерно так:
Идентификатор (PK) Имя
Другие бизнес-свойства и ассоциации ...

Мне нужен мой DAL (JPAс hibernate в качестве провайдера), чтобы вернуть список сущностей, которые соответствуют некоторым ограничениям (или просто вернуть их все), но вместо того, чтобы возвращать сами сущности, я хотел бы получить только свойства Id и Name.
Я знаюэто может быть достигнуто с помощью HQL / SQL (что-то вроде: выберите идентификатор, имя из сущности, где ...), но я не хочу идти по этому пути.
Я думал о том, чтобы как-то определить пару составной частисущность и мысль, которая может мне помочь, но я не уверен, что это «законно», поскольку идентификатор - это PK.
Логика для этого сценария состоит в том, чтобы иметь текстовое поле, которое асинхронно запрашивает веб-сервис (и черезDAL) для соответствующих объектов, и как только объект выбран, он загружается целиком и отправляется на внешний интерфейс.

Обновление:
Теперь я совершенно уверен, что буду использовать интерфейс CriteriaBuilder в JPA для построения запросов, поэтому JPQL / HQL полностью исключен.
IЯ думаю, что я искал эквивалент JPA для resultTransformer Hibernate (и я дам ему непостоянный класс).

Буду признателен за любые отзывы,
Итай

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Извините, игнорируйте это, так как я пропустил часть "не хочу делать HQL" в вашем вопросе

Предложение HQL select очень гибкое.Если вам нужно всего два свойства, вы можете использовать

select new MyClass(foo.id,foo.name) From Foo foo

, где MyClass - ваш Java-класс с конструктором (id, name).

Если вы не хотите создавать отдельный класс, HQLможет вернуть массив типа Object.

select foo.id,foo.name From Foo foo

Пожалуйста, прочитайте подробности о предложении select здесь из документации

0 голосов
/ 20 февраля 2011

Учитывая ваши требования, я думаю, что HQL или JPQL - лучший вариант, и как часто вы будете менять имена полей?
Вы можете использовать @NamedQuery для удержания HQL в том же классе сущностей, чтобы вы не пропустили это изменение, если измените имена полей.

...