Выберите из двух таблиц, используя JPQL
Вопрос
я использую JPQL
Чтобы получить данные. Я могу получить данные, используя утверждение
List persons = null;
persons = em.createQuery("select p.albumName from PhotoAlbum p , Roleuser r
where r = p.userId and r.userID = 1");
Теперь я могу получить имена альбома, используя это:
int i=0;
for (i=0;i<persons.size(); i++)
{
System.out.println("Testing n "+ i +" " + persons.get(0));
}
Теперь я хочу получить имя альбома и ряд роли по имени firstname
Я использую запрос
persons = em.createQuery("select r.firstName , p.albumName from PhotoAlbum p ,
Roleuser r where r = p.userId and r.userID = 1").getResultList();
Теперь, как я могу получить рядные ряды Имя и Albumname, так как Persons.get (0) возвращает объект
Запустив код:
for (i=0;i<persons.size(); i++)
{
//r = (Roleuser) persons.get(i);
System.out.println("Testing n "+ i +" " + persons.get(i));
}
Я получаю это:
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
Как мне снабдить persons.get(0)
и получить firstname
а также albumname
?
Решение
Теперь, как заставить строки имени и Albumname в качестве персонала .get (0) возвращает объект
Запросы с несколькими select_expressions. В пункте выбора возврата Object[]
(или а List
из Object[]
). Из спецификации JPA:
4.8.1 Тип результата Из пункта выбора
Тип результата запроса, указанного в пункте выбора запроса, представляет собой абстрактный тип схемы, тип состояния, результат агрегированной функции, результат работы конструкции или некоторая последовательность этих.
Тип результата пункта выбора определяется типов результатов select_expressions. содержащийся в нем. Когда кратно select_expressions. используются в пункте выбора, результат запроса имеет тип
Object[]
, и элементы в этом результате соответствуют по порядку их спецификации в пункте выбора и в типе до результатов типов каждого из select_expressions..
Так что в вашем случае вы, вероятно, хотите что-то вроде этого:
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]);
}
Примечание. [LEFT [OUTER] | INNER ] JOIN
синтаксис). Смотрите весь раздел 4.4.5 присоединяется в спецификации.
использованная литература
- Спецификация JPA 1.0
- Раздел 4.8.1 «Тип результата».
- Раздел 4.8.2 "Выражения конструктора в пункте выбора"
- Раздел 4.4.5 "Joins"