Question

Je suis nouveau à EJB et essayer d'obtenir ma tête autour de la traduction des concepts SQL pour des beans entité EJB.

Supposons que j'ai deux tables: PEOPLE (id, nom) CONTACT (pid, phone_number). Si je veux obtenir une liste de toutes les personnes si elles ont ou non #s de téléphone, dans mon bean session EJB je lance simplement une requête SQL via JDBC tels que:

SELECT PEOPLE.name, CONTACT.phone_number 
FROM PEOPLE 
LEFT JOIN CONTACT ON PEOPLE.id = CONTACT.pid

Au lieu d'utiliser SQL / JDBC, je veux maintenant utiliser des beans entité EJB. Je crée donc des classes correspondant de haricot entité EJB3 pour mes tableaux.

J'ai maintenant accès aux deux classes d'entités de mon bean session et je ne souhaite plus accéder à mes tables de base de données directement via SQL / JDBC de mon bean session. Je veux seulement utiliser mes beans entités et les capacités de JPA. Quelle est la conception EJB appropriée de sorte que dans mon grain de session, je reçois les mêmes résultats que ma requête SQL?

Je suis pas clair sur la façon d'utiliser l'entité EJB classes de haricots pour produire les mêmes résultats que mon externe SQL requête de jointure. Aide.

Était-ce utile?

La solution

Tout d'abord, créer deux entités JPA, quelque chose comme ça pour 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
}

Et pour Contact:

@Entity
@Table( name="CONTACT" )
public class Contact {

    @Id @Column
    private Long pid;

    @Column
    private String phoneNumber;

    // getters and setters
}

Ensuite, pour générer l'OUTER JOIN requête en utilisant JPQL:

SELECT p FROM People p LEFT JOIN p.contact c
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top