我可以对未映射到表的实体使用hibernate查询语言吗?

时间:2012-03-20 06:34:09

标签: mysql sql hibernate orm hql

以下是我用来检索HolidayPackages for a given Hotel的mySQL查询:

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
  • 饭店
  • 的空房

我没有HolidayPackageHotel的POJO。

  

有没有办法使用Criteria API或HQL来执行sql查询而不为HolidayPackageHotel创建POJO?

对于古玩,数据库关系: DB relations

2 个答案:

答案 0 :(得分:3)

没有。 您无法在HQL中使用未映射的实体

如果要从查询生成Bean列表,可以使用 ResultSet转换器,它可以将查询结果(对象数组)转换为bean 。通过这样做,您将节省创建和填充POJO bean的开销。

阅读here以获取示例。

答案 1 :(得分:-3)

是的,你可以在HQL中使用未映射的实体.Below就是我在我的一个项目中所做的例子。

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