Tradução de junção externa SQL Query em EJB entidade feijão
Pergunta
Eu sou novo no EJB e tentando entender os conceitos de SQL para a EJB Entity Beans.
Suponha que eu tenha duas tabelas: pessoas (id, nome), contato (pid, telefone_number). Se eu quiser obter uma lista de todas as pessoas, se elas têm ou não o telefone #s, no meu ejb Sessão Bean, simplesmente emite uma consulta SQL via JDBC como:
SELECT PEOPLE.name, CONTACT.phone_number
FROM PEOPLE
LEFT JOIN CONTACT ON PEOPLE.id = CONTACT.pid
Em vez de usar o SQL/JDBC, agora quero usar o EJB Entity Beans. Então, eu crio as classes de feijão da entidade EJB3 correspondentes para minhas tabelas.
Portanto, agora tenho acesso às duas classes de entidade do meu feijão de sessão e não desejo mais acessar minhas tabelas de banco de dados diretamente via SQL/JDBC do meu feijão de sessão. Eu só quero usar meu feijão e capacidades da entidade da JPA. Qual é o design EJB adequado para que, no meu feijão de sessão, recebo os mesmos resultados que minha consulta SQL?
Não estou claro sobre como usar as classes de feijão da entidade EJB para produzir os mesmos resultados que minha consulta de junção externa SQL. Ajuda.
Solução
Primeiro, crie duas entidades JPA, algo assim para 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
}
E para Contact
:
@Entity
@Table( name="CONTACT" )
public class Contact {
@Id @Column
private Long pid;
@Column
private String phoneNumber;
// getters and setters
}
Em seguida, para gerar a consulta de junção externa usando JPQL:
SELECT p FROM People p LEFT JOIN p.contact c