【问题标题】:selecting all rows from a database using JPA in WebSphere在 WebSphere 中使用 JPA 从数据库中选择所有行
【发布时间】:2012-04-05 07:13:13
【问题描述】:

我正在尝试实现一个使用开放 JPA 访问数据层的 Web 服务。我正在使用 websphere v7.0 和 JPA 2.0。该服务将从一个小数据库中获取所有行(大约 6 行,将来不会扩展太多)。我正在尝试获取所有行并通过用户返回它们。我现在正在创建将检索数据的会话 Bean。

我有几个 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;
}

里面还有很多,但我不想写得太长。我只是想我会展示几个有用的变量,也许还有一些 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 或类似的东西进行选择。任何建议都会很棒。

【问题讨论】:

    标签: websphere jpa-2.0 openjpa


    【解决方案1】:

    你可以使用NamedQuery

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

    在会话 bean 中:

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

    【讨论】:

    • 也可以直接使用查询字符串(例子来自here)。 List&lt;EmailDomainTrust&gt; ListOfEmailDomains = entityManager.createQuery("SELECT e FROM EmailDomainTrust e").getResultList();
    【解决方案2】:

    通过内联查询

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多