在 WebSphere 中使用 JPA 从数据库中选择所有行

Posted

技术标签:

【中文标题】在 WebSphere 中使用 JPA 从数据库中选择所有行【英文标题】:selecting all rows from a database using JPA in WebSphere 【发布时间】: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 或类似的东西进行选择。任何建议都会很棒。

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于在 WebSphere 中使用 JPA 从数据库中选择所有行的主要内容,如果未能解决你的问题,请参考以下文章

我想要的只是使用 JPA 2.0 访问 Websphere V8 中的 H2 mem 数据库

使用 Hibernate JPA 2.1 将应用程序部署到 IBM WebSphere 会产生 NullPointerException

Spring Data JPA中多数据源的配置

Spring 4,Websphere 8.5.5 上的 Hibernate JPA JarInputStreamBasedArchiveDescriptor 错误

如何在 Oracle 中使用 JPA 存储日期和时间?

如何从托管在 Websphere 6.1 上的 DB2 数据库获取 XADatasource