преобразование SQL-запроса внешнего соединения в EJB-компоненты управления данными

StackOverflow https://stackoverflow.com/questions/1734251

  •  20-09-2019
  •  | 
  •  

Вопрос

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

Предположим, у меня есть две таблицы:ЛЮДИ (идентификатор, имя), КОНТАКТ (pid, номер_телефона).Если я хочу получить список всех людей, независимо от того, есть ли у них номера телефонов, в моем сеансовом компоненте 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.Помощь.

Это было полезно?

Решение

Сначала создайте два объекта 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top