выбор всех строк из базы данных с использованием JPA в WebSphere - PullRequest
15 голосов
/ 20 марта 2012

Я пытаюсь реализовать веб-сервис, который использует открытый JPA для доступа к уровню данных. Я использую websphere v7.0 и JPA 2.0. Этот сервис собирает все строки из небольшой базы данных (около 6 строк, и в будущем он вообще не будет сильно расширяться). Я пытаюсь получить все строки и вернуть их через пользователя. Я сейчас создаю сессионный компонент, который будет извлекать данные.

У меня есть несколько объектов JPA, один из которых (представляющий строку всех данных, которые я хочу вернуть) выглядит так ...

@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;
}

Там намного больше, но я не хочу делать это слишком долго. Я просто подумал, что покажу пару полезных переменных и, возможно, некоторые получу наборы. В моем сессионном компоненте я пытаюсь получить все строки ...

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;    
}

То, что я имею до сих пор, определенно не подходит. Но учебники онлайн никогда не описывают получение всех строк из таблицы. У меня не будет никаких параметров для этого метода, поэтому я не смогу выбирать на основе ID или чего-либо подобного. Любой совет был бы великолепен.

Ответы [ 2 ]

18 голосов
/ 21 марта 2012

Вы можете использовать NamedQuery

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

в сессионном компоненте:

return em.createNamedQuery("EmailDomainTrust.getEmailDomains", EmailDomainTrust.class).getResultList();
15 голосов
/ 07 января 2013

По встроенному запросу

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

По именованному запросу ( Андрей и mprabhat )

Вы можете использовать NamedQuery

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

в сессионном компоненте:

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

С API запросов (взято из Criteria Query API )

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