seleccionar entre dos tablas usando JPQL
Pregunta
Estoy usando JPQL
para recuperar los datos. Puedo obtener datos mediante la instrucción
List persons = null;
persons = em.createQuery("select p.albumName from PhotoAlbum p , Roleuser r
where r = p.userId and r.userID = 1");
Ahora puedo obtener los nombres de los álbumes utilizando la siguiente:
int i=0;
for (i=0;i<persons.size(); i++)
{
System.out.println("Testing n "+ i +" " + persons.get(0));
}
Ahora quiero conseguir el nombre del álbum y de fila con nombre firstname
del roleuser
Estoy utilizando la consulta ??p>
persons = em.createQuery("select r.firstName , p.albumName from PhotoAlbum p ,
Roleuser r where r = p.userId and r.userID = 1").getResultList();
Ahora, ¿cómo puedo obtener el apellido filas y ALBUMNAME como el persons.get (0) devuelve un objeto
ejecutando el código:
for (i=0;i<persons.size(); i++)
{
//r = (Roleuser) persons.get(i);
System.out.println("Testing n "+ i +" " + persons.get(i));
}
Me estoy poniendo esto:
Testing n 0 [Ljava.lang.Object;@4edb4077
INFO: Testing n 1 [Ljava.lang.Object;@1c656d13
INFO: Testing n 2 [Ljava.lang.Object;@46dc08f5
INFO: Testing n 3 [Ljava.lang.Object;@654c0a43
¿Cómo puedo asignar el persons.get(0)
y obtener el firstname
y albumname
?
Solución
Ahora ¿cómo obtener las filas primerNombre y ALBUMNAME como el persons.get (0) devuelve un objeto
Consultas con múltiples select_expressions en la cláusula SELECT devolver un Object[]
(o un List
de Object[]
). A partir de la especificación JPA:
4.8.1 Resultado Tipo de la cláusula SELECT
El tipo del resultado de consulta especificado por la cláusula SELECT de una consulta es una entidad tipo de esquema abstracto, una tipo de campo estado, el resultado de una función de agregado, el resultado de una operación de construcción, o algún secuencia de estos.
El tipo de resultado de la cláusula SELECT se define por las de los tipos de resultados de select_expressions contenido en eso. cuando múltiples select_expressions se utilizan en la cláusula SELECT, el resultado de la consulta es de tipo
Object[]
, y el elementos en este resultado de correspondencia Para el orden de su especificación en la cláusula SELECT y en el tipo de los tipos de resultados de cada uno de select_expressions .
Así pues, en su caso, es probable que desee algo como esto:
for (i=0;i<persons.size(); i++) {
//r = (Roleuser) persons.get(i);
System.out.println("Testing n " + i + " " + persons.get(i)[0] + ", " +
persons.get(i)[1]);
}
Tenga en cuenta que la especificación de una combinación interna mediante el uso de un producto cartesiano en la cláusula FROM y una condición de unión en la cláusula WHERE es menos típico de especificar un explícitas relaciones unirse sobre la entidad (utilizando la sintaxis [LEFT [OUTER] | INNER ] JOIN
). Ver toda la sección 4.4.5 une en la especificación.
Referencias
- JPA 1.0 Especificación
- Sección 4.8.1 "Resultado Tipo de la cláusula SELECT"
- Sección 4.8.2 "Constructor expresiones en la cláusula SELECT"
- Sección 4.4.5 "une"