Siguiente es la consulta de mySQL que estoy utilizando para recuperar 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;

He POJOs con la asignación para:

  • HolidayPackage
  • Hotel
  • HotelRoom

No tengo un POJO para HolidayPackageHotel.

¿Hay alguna manera de usar el API de Criterios o HQL para ejecutar la consulta sql sin la creación de un POJO para HolidayPackageHotel?

Para los curiosos, DB relaciones:
Puedo usar el modo de hibernación lenguaje de consulta para las entidades que no asignado a una tabla?

OriginalEl autor brainydexter | 2012-03-20

2 Comentarios

  1. 3

    No. Usted no puede usar los desasociados entidades dentro de la HQL.

    Si quieres generar la Lista de los granos de la consulta puede utilizar el conjunto de resultados de los transformadores, que puede convertir los resultados de la consulta(matrices de objetos) a los frijoles. Haciendo esto, usted va a guardar la sobrecarga de crear y llenar el POJO frijoles.

    Leer aquí para un ejemplo.

    He utilizado el siguiente NamedNativeQuery: @NamedNativeQuery( name = «getHolidayPackageForHotel», query = «SELECT * FROM wah_schema.holidaypackage pkg INNER JOIN wah_schema.holidaypackagehotel hph EN pkg.idHolidayPackage = hph.idHolidayPackage INNER JOIN wah_schema.hotelroom de rrhh EN materia de recursos humanos.idHotelRoom = hph.idHotelRoom DONDE hr.idHotel = :idHotel», resultClass= HolidayPackage.class) Este parecía funcionar para mí, ya que el tipo de devolución: HolidayPackage.class es un POJO entidad que se ha definido. ¿Crees que este enfoque tiene alguna desventaja ?
    En la consulta, SELECT * from no es un enfoque preferido. Agregar los nombres de columna en la cláusula select, si es posible. el resto está bien.
    Tengo un la Columna ‘IDHOTELROOM’ no se encuentra si yo uso esta: SELECT DISTINCT pkg.idHolidayPackage, pkg.nombre, pkg.itineraryHeader DE wah_schema.holidaypackage pkg INNER JOIN wah_schema.holidaypackagehotel hph EN pkg.idHolidayPackage = hph.idHolidayPackage INNER JOIN wah_schema.hotelroom de rrhh EN materia de recursos humanos.idHotelRoom = hph.idHotelRoom DONDE hr.idHotel = ?
    Si está ejecutando en problemas con NamedNativeQuery Usted puede probar el ejemplo dado aquí.

    OriginalEl autor ManuPK

  2. -3

    sí, Usted puede usar la onu asignada a las entidades dentro de la HQL.A continuación está el ejemplo de lo que hice en uno de mis proyectos.

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

    OriginalEl autor user2361042

Dejar respuesta

Please enter your comment!
Please enter your name here