Mysql 是否可以对未映射到表的实体使用hibernate查询语言?
下面是我用来检索给定酒店的度假套餐的mySQL查询:Mysql 是否可以对未映射到表的实体使用hibernate查询语言?,mysql,sql,hibernate,orm,hql,Mysql,Sql,Hibernate,Orm,Hql,下面是我用来检索给定酒店的度假套餐的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 = hp
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,具有以下映射:
- 度假套餐
- 酒店
- 酒店房间
否。您不能在HQL中使用未映射的实体 如果要从查询生成bean列表,可以使用结果集转换器,它可以将查询结果(对象数组)转换为bean。通过这样做,您将节省创建和填充POJO bean的开销
阅读示例。是的,您可以在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());
}
我使用了以下命名请求:@namedNAVIQUERY(name=“getHolidayPackageForHotel”,query=“SELECT*FROM wah_schema.holidaypackage pkg INNER JOIN wah_schema.holidaypackagehotel hph ON pkg.idHolidayPackage=hph.idHolidayPackage INNER JOIN wah_schema.hotelroom hr ON hr.idHotelRoom=hph.idHotelRoom其中hr.idHotel=:idHotel”,resultClass=HolidayPackage.class)这似乎对我有效,因为返回类型:HolidayPackage.class是我定义的POJO实体。您认为这种方法有缺点吗?在任何查询中,SELECT*from都不是首选方法。如果可能,在select子句中添加列名。其余的没问题。如果我使用此选项,我将找不到“IDHOTELROOM”列:选择DISTINCT pkg.idHolidayPackage,pkg.name,pkg.inventureheader FROM wah_schema.holidaypack pkg internal JOIN wah_schema.holidaypackagehotel hph ON pkg.idHolidayPackage=hph.idHolidayPackage internal JOIN wah_schema.hotelroom hr ON hr.idHotelRoom=hph.idHotelRoom其中hr.idHotelRoom=?如果您遇到namednavity设备的问题,可以尝试给出的示例。