SQL-запрос к JPA Joins - PullRequest
       4

SQL-запрос к JPA Joins

2 голосов
/ 02 ноября 2010

только что начал использовать JPA сегодня, так что я новичок в этом.
Как можно сказать
"SELECT login.ID, userID, logInTime, logOutTime, user.ID AS 'uID', surname FROM login, user WHERE login.userID = user.ID" в JPA?
Мне нужно объединить две таблицы через userID.
Я просмотрел несколько учебников в сети, но не смог найти ответ на этот вопрос.
Спасибо!

Ответы [ 3 ]

3 голосов
/ 03 ноября 2010

Дикие предположения Я бы предположил, что ваша модель предметной области включает как минимум две сущности User и Login, причем последняя представляет собой нечто вроде сеанса.(количество элементов User -1: n- Session)

Мои воображаемые сущности:

@Entity
class User {
    @OneToMany(mappedBy="user")
    private List<Login> logins;
    ...
}

@Entity
class Login {
    @ManyToOne
    private User;
    ...
}

Чтобы получить все Login с:

jpql: "from Login"

(Связанные объекты User выбираются по умолчанию. На стороне @ManyToOne тип извлечения по умолчанию - извлечение с нетерпением.)

Чтобы получить всеUser s:

jpql: "select u from User u join fetch u.logins"

(По умолчанию связанные объекты List<Login> не выбираются. На стороне @OneToMany типом выборки по умолчанию является отложенная выборка.)

Начало работы с JPA: документация openJPA (Взгляните на главу 4 и 5 для разработки сущностей и главу 10 для JPQL. Общие части JPA документации openJPA соответствуют всем реализациям JPA.)

PS Было бы проще, если бы вы добавили немного больше деталей в свои вопросы.

2 голосов
/ 03 ноября 2010

JPQL-запросы пишутся против объектов, а не таблиц.Невозможно написать запрос, не зная, что это за объекты и как определяется их взаимосвязь.

Сначала необходимо создать объекты Entity, которые представляют Login и User.Вы сопоставляете отношения между ними, и это становится соединением для запроса.

0 голосов
/ 03 ноября 2010

Предполагая, что логин и пользователь теперь являются объектами, а также предполагая, что отношение между логином и пользователем состоит в том, что один пользователь имеет много логинов, будет примерно так

select 
       L.ID,
       u.userID, 
       L.logInTime, 
       L.logOutTime,
       u.ID 
from 
       User U, 
       IN(u.logins) L /*note that the IN makes the inner join between Login and user*/

Renember Я предполагаю отображение между сущностями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...