traducendo outer join query SQL in bean di entità EJB
Domanda
Sono nuovo di EJB e cercando di ottenere la mia testa intorno tradurre concetti SQL per entity bean EJB.
Supponiamo che io ho due tabelle: persone (id, nome), contatto (PID, PHONE_NUMBER). Se voglio ottenere un elenco di tutte le persone anche se non hanno #s telefono, nella mia session bean EJB ho semplicemente esegue una query SQL tramite JDBC come ad esempio:
SELECT PEOPLE.name, CONTACT.phone_number
FROM PEOPLE
LEFT JOIN CONTACT ON PEOPLE.id = CONTACT.pid
Invece di usare SQL / JDBC, io ora voglio usare EJB bean di entità. Così creo il corrispondente classi bean di entità EJB3 per le mie tabelle.
Così ora ho accesso a entrambe le classi di entità dal mio session bean e non ho più desidero accedere alle mie tabelle di database direttamente tramite SQL / JDBC dal mio session bean. Ho solo voglia di usare i miei fagioli e le capacità di JPA entità. Qual è il disegno EJB corretto in modo che nella mia session bean, ottengo gli stessi risultati come il mio query SQL?
Sono poco chiare su come utilizzare le classi entità bean EJB per produrre gli stessi risultati come il mio esterno join SQL query. Aiuto.
Soluzione
In primo luogo, creare due entità JPA, qualcosa di simile per 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 per Contact
:
@Entity
@Table( name="CONTACT" )
public class Contact {
@Id @Column
private Long pid;
@Column
private String phoneNumber;
// getters and setters
}
Quindi, per generare l'OUTER JOIN query utilizzando JPQL:
SELECT p FROM People p LEFT JOIN p.contact c