Можно ли использовать язык запросов гибернации для объектов, не сопоставленных с таблицей? - PullRequest
8 голосов
/ 20 марта 2012

Ниже приведен запрос mySQL, который я использую для получения HolidayPackages for a given Hotel:

SELECT 
    pkg.idHolidayPackage, pkg.name
FROM
    holidaypackage pkg
        INNER JOIN
    holidaypackagehotel hph ON pkg.idHolidayPackage = hph.idHolidayPackage
        INNER JOIN
    hotelroom hr ON hr.idHotelRoom = hph.idHotelRoom
WHERE
    hr.idHotel = 1;

У меня есть POJO с отображением для:

  • HolidayPackage
  • Hotel
  • 1012 * гостиничный номер *

У меня нет POJO для HolidayPackageHotel.

Можно ли использовать Criteria API или HQL для выполнения запроса sql без создания POJO для HolidayPackageHotel?

Для курьезов, отношения БД: DB relations

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Нет. Вы не можете использовать неотображенные объекты внутри HQL .

Если вы хотите сгенерировать список bean-компонентов из запроса, вы можете использовать преобразователи ResultSet, которые могут преобразовывать результаты запроса (объектные массивы) в bean-компоненты . Этим вы сэкономите на создании и заполнении бобов POJO.

Прочитайте здесь для примера.

0 голосов
/ 29 мая 2013

да, вы можете использовать неотображенные объекты внутри HQL. Ниже приведен пример того, что я делал в одном из моих проектов.

List list = session.createQuery("select p, a from UserAccount p, Channels a " +  "where p.uid = a.uid").list();  

Iterator iter = list.iterator();  
while (iter.hasNext())  
{  
  Object[] objArray = (Object[]) iter.next();  
  UserAccount p = (UserAccount) objArray[0];  
  Channels a = (Channels) objArray[1];  
  System.out.println(p.getUsername());  
  System.out.println(a.getTitle());  
}
...