выбрать из двух таблиц с помощью JPQL - PullRequest
5 голосов
/ 25 августа 2010

Я использую 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();

Теперь, как мне узнать имя и строку в строке, так как Person.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?

1 Ответ

8 голосов
/ 26 августа 2010

Теперь, как получить имя и строку в именах строк, так как people.get (0) возвращает объект

Запросы с несколькими select_expressions в предложении SELECTвернуть Object[] (или List из Object[]).Из спецификации JPA:

4.8.1 Тип результата предложения SELECT

Тип результата запроса, указанного предложением SELECT запроса, является типом абстрактной схемы сущности,тип поля состояния, результат статистической функции, результат операции построения или некоторая их последовательность.

Тип результата предложения SELECT определяется типами результата select_expressions содержится в нем.Когда в предложении SELECT используется несколько select_expressions , результат запроса имеет тип Object[], и элементы в этом результате соответствуют порядку их спецификации в предложении SELECT и в типек типам результатов каждого из 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]);
}

Обратите внимание, что указаниевнутреннее объединение с использованием декартового произведения в предложении FROM и условие объединения в предложении WHERE менее типично, чем указание явного объединения через отношения сущностей (с использованием синтаксиса [LEFT [OUTER] | INNER ] JOIN).См. Весь раздел 4.4.5 Соединения в спецификации.

Ссылки

  • JPA 1.0 Спецификация
    • Раздел 4.8.1 "Тип результатапредложения SELECT "
    • Раздел 4.8.2" Выражения конструктора в предложении SELECT "
    • Раздел 4.4.5" Соединения "
...