web-dev-qa-db-fra.com

sélection de toutes les lignes d'une base de données à l'aide de JPA dans WebSphere

J'essaie d'implémenter un service Web qui utilise JPA ouvert pour accéder à la couche de données. J'utilise websphere v7.0 et JPA 2.0. Ce service va extraire toutes les lignes d'une petite base de données (environ 6 lignes et il ne se développera pas beaucoup du tout à l'avenir). J'essaie d'obtenir toutes les lignes et de les renvoyer via l'utilisateur. Je suis en train de créer le Session Bean qui récupérera les données.

J'ai plusieurs objets JPA, l'un d'eux (représentant une ligne de toutes les données que je veux retourner) ressemble à ça ...

@Entity
@NamedQueries({
@NamedQuery(name="EmailDomainTrust.getEmailDomains",
        query="SELECT DOMAIN_NAME,"+ 
        "DESCRIPTION, CONFIRMED_BY, CONFIRMED_DATE" + 
        "FROM EMAIL_DOMAIN_TRUST")          
})
@Table(name="EMAIL_DOMAIN_TRUST")
public class EmailDomainTrust implements Serializable {
    @Id
    @Column(name="EMAIL_DOMAIN_TRUST_ID")
    private long emailDomainTrustId;

    @Column(name="DOMAIN_NAME")
    private String domainName;
}

Il y a beaucoup plus là-dedans, mais je ne veux pas prolonger cela. J'ai juste pensé que je montrerais quelques variables utiles et peut-être quelques get sets. Dans mon bean session, j'essaie d'obtenir toutes les lignes ...

public List<EmailDomainTrust> GetEmailDomains(){
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("");
    EntityManager em = emf.createEntityManager();
    //EntityTransaction userTransaction = em.getTransaction();
    System.out.println("Testing 1..2...3...!");
    List<EmailDomainTrust> ListOfEmailDomains = em.find(EmailDomainTrust.class, arg1)

    try
    {
    }
    catch(Exception e)
    {
    }
    return null;    
}

Ce que j'ai jusqu'à présent n'est certainement pas à la hauteur. Mais les didacticiels en ligne ne décrivent jamais l'extraction de toutes les lignes d'une table. Je n'aurai aucun paramètre pour cette méthode, donc je ne pourrai pas sélectionner en fonction de l'ID ou de quelque chose comme ça. Tout conseil serait bon.

15
SoftwareSavant

Vous pouvez utiliser NamedQuery

@NamedQueries({
@NamedQuery(name="EmailDomainTrust.getEmailDomains",
    query="SELECT e FROM EmailDomainTrust e")          
})

en session bean:

return em.createNamedQuery("EmailDomainTrust.getEmailDomains", EmailDomainTrust.class).getResultList();
18
Andrey

Par requête en ligne

List<EmailDomainTrust> ListOfEmailDomains = entityManager.createQuery("SELECT e FROM EmailDomainTrust e").getResultList();

Par requête nommée (par Andrey et mprabhat )

Vous pouvez utiliser NamedQuery

@NamedQueries({
@NamedQuery(name="EmailDomainTrust.getEmailDomains",
    query="SELECT e FROM EmailDomainTrust e")          
})

en session bean:

return em.createNamedQuery("EmailDomainTrust.getEmailDomains", EmailDomainTrust.class).getResultList();

Avec l'API de requête (glané de API de requête de critères )

CriteriaQuery<EmailDomainTrust> criteria = em.getCriteriaBuilder().createQuery(EmailDomainTrust.class);
    criteria.select(criteria.from(EmailDomainTrust.class));
    List<EmailDomainTrust> ListOfEmailDomains = em.createQuery(criteria).getResultList();
    return ListOfEmailDomains;
15
Benny Bottema