web-dev-qa-db-ja.com

WebSphereのJPAを使用してデータベースからすべての行を選択する

オープンJPAを使用してデータレイヤーにアクセスするWebサービスを実装しようとしています。 websphere v7.0およびJPA 2.0を使用しています。このサービスは、小さなデータベースからすべての行を取得します(約6行であり、今後はまったく拡張されません)。すべての行を取得し、ユーザーを介してそれらを返そうとしています。現在、データを取得するセッションBeanを作成しています。

私はいくつかのJPAオブジェクトを持っています(そのうちの1つ(返したいすべてのデータの行を表す)は次のように見えます)...

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

そこにはもっとたくさんありますが、これをあまり長くしたくありません。いくつかの有用な変数といくつかのgetセットを表示すると思いました。セッションBeanでは、すべての行を取得しようとしています...

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などに基づいて選択することはできません。どんなアドバイスも素晴らしいでしょう。

15
SoftwareSavant

NamedQueryを使用できます

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

セッションBean内:

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

インラインクエリによる

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

名前付きクエリ( Andrey and mprabhat

NamedQueryを使用できます

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

セッションBean内:

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;
15
Benny Bottema