übersetzen äußere SQL-Abfrage in EJB Entity Beans beitreten
Frage
Ich bin neu in EJB und versucht, meinen Kopf um SQL-Konzepte zu EJB Entity Beans zu übersetzen.
Angenommen, ich habe zwei Tabellen: PEOPLE (id, name), CONTACT (pid, phone_number). Wenn ich eine Liste aller Menschen zu bekommen, ob sie Telefon #s haben, in meiner EJB Session Bean ich einfach eine SQL-Abfrage über JDBC ausgeben wie:
SELECT PEOPLE.name, CONTACT.phone_number
FROM PEOPLE
LEFT JOIN CONTACT ON PEOPLE.id = CONTACT.pid
Anstelle der Verwendung von SQL / JDBC, ich möchte jetzt EJB Entity Beans verwenden. Also ich EJB3 Entity-Bean-Klassen für meine Tabellen erstellen entsprechen.
Also ich habe jetzt Zugang zu beiden Entitätsklassen von meinem Session-Bean und ich nicht mehr dem Wunsch meiner Datenbanktabellen über SQL / JDBC aus meinem Session-Bean direkt zuzugreifen. Ich will nur meine Entity Beans und Fähigkeiten der PPV nutzen. Was ist das richtige EJB Design, so dass in meinem Session-Bean, ich die gleichen Ergebnisse wie meine SQL-Abfrage erhalten?
Ich bin unklar, wie die EJB-Entity-Bean-Klassen verwenden, um die gleichen Ergebnisse wie mein SQL-Outer-Join-Abfrage zu erzeugen. Hilfe.
Lösung
Erstellen Sie zunächst zwei JPA-Entitäten, so etwas wie die für 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
}
Und für Contact
:
@Entity
@Table( name="CONTACT" )
public class Contact {
@Id @Column
private Long pid;
@Column
private String phoneNumber;
// getters and setters
}
Dann erzeugen die OUTER JOIN Abfrage JPQL mit:
SELECT p FROM People p LEFT JOIN p.contact c