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

Sof*_*ant 16 websphere openjpa jpa-2.0

我正在尝试实现一个使用开放式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;
}
Run Code Online (Sandbox Code Playgroud)

那里还有很多,但我不想让这个太久.我只是想我会展示一些有用的变量,也许还有一些得到的集合.在我的会话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;    
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的绝对不是鼻烟.但是,在线教程从未描述过将所有行从表中删除.我没有这个方法的任何参数,所以我将无法根据ID或类似的东西进行选择.任何建议都会很棒.

And*_*rey 18

您可以使用 NamedQuery

@NamedQueries({
@NamedQuery(name="EmailDomainTrust.getEmailDomains",
    query="SELECT e FROM EmailDomainTrust e")          
})
Run Code Online (Sandbox Code Playgroud)

在会话bean中:

return em.createNamedQuery("EmailDomainTrust.getEmailDomains", EmailDomainTrust.class).getResultList();
Run Code Online (Sandbox Code Playgroud)

  • 或者,您可以直接使用查询字符串(例如,来自[here](http://www.codemiles.com/jpa/get-all-objects-for-an-entity-t6273.html的示例))。`List &lt;EmailDomainTrust&gt; ListOfEmailDomains = EntityManager.createQuery(“从EmailDomainTrust e中选择e”)。getResultList();` (2认同)

Ben*_*ema 17

通过内联查询

List<EmailDomainTrust> ListOfEmailDomains = entityManager.createQuery("SELECT e FROM EmailDomainTrust e").getResultList();
Run Code Online (Sandbox Code Playgroud)

通过命名查询(由Andrey和mprabhat)

您可以使用 NamedQuery

@NamedQueries({
@NamedQuery(name="EmailDomainTrust.getEmailDomains",
    query="SELECT e FROM EmailDomainTrust e")          
})
Run Code Online (Sandbox Code Playgroud)

在会话bean中:

return em.createNamedQuery("EmailDomainTrust.getEmailDomains", EmailDomainTrust.class).getResultList();
Run Code Online (Sandbox Code Playgroud)

使用查询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;
Run Code Online (Sandbox Code Playgroud)