перевод SQL-запроса внешнего соединения в EJB-компоненты - PullRequest
1 голос
/ 14 ноября 2009

Я новичок в EJB и пытаюсь разобраться с переводом концепций SQL в бины сущностей EJB.

Предположим, у меня есть две таблицы: PEOPLE (id, name), CONTACT (pid, phone_number). Если я хочу получить список всех людей, независимо от того, есть ли у них телефонные номера, в моем EJB-сеансе я просто выдаю SQL-запрос через JDBC, такой как:

SELECT PEOPLE.name, CONTACT.phone_number 
FROM PEOPLE 
LEFT JOIN CONTACT ON PEOPLE.id = CONTACT.pid

Вместо того, чтобы использовать SQL / JDBC, теперь я хочу использовать EJB-сущностные бины. Поэтому я создаю соответствующие классы EJB3-компонентов для своих таблиц.

Итак, теперь у меня есть доступ к обоим классам сущностей из моего сессионного компонента, и я больше не хочу получать доступ к своим таблицам базы данных напрямую через SQL / JDBC из моего сессионного компонента. Я только хочу использовать свои сущностные компоненты и возможности JPA. Каков правильный дизайн EJB, чтобы в моем сессионном компоненте я получал те же результаты, что и мой SQL-запрос?

Мне неясно, как использовать классы EJB-сущностей для получения тех же результатов, что и мой запрос на внешнее соединение SQL. Помощь.

1 Ответ

2 голосов
/ 14 ноября 2009

Сначала создайте две сущности JPA, что-то подобное для People:

@Entity
@Table( name="PEOPLE" )
public class People {

    @Id @Column
    private Long id;

    @Column
    private String name;

    @OneToOne
    @JoinColumn( name="pid" )
    private Contact contact;

    // getters and setters
}

А для Contact:

@Entity
@Table( name="CONTACT" )
public class Contact {

    @Id @Column
    private Long pid;

    @Column
    private String phoneNumber;

    // getters and setters
}

Затем для генерации запроса OUTER JOIN с использованием JPQL:

SELECT p FROM People p LEFT JOIN p.contact c
...