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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top