【问题标题】:How to return a set of persisted objects?如何返回一组持久对象?
【发布时间】:2014-06-09 13:18:57
【问题描述】:

我有一个类,其中包含通过实体管理器创建客户对象的方法。我想添加另一个方法,它将返回一组创建的对象;在我的情况下我该怎么做?例如,我有以下代码:

public class DefaultCoreRepository implements CoreRepository {

private EntityManager entityManager;

@PersistenceContext(unitName = "crm-db")
public void setEntityManager(EntityManager entityManager) {
    this.entityManager = entityManager;
}

private <T> T persist(T entity) {
    entityManager.persist(entity);
    return entity;
}

public void createCustomer(Customer customer) {
    persist(customer);
}

public Set<Customer> getCustomers() {
    //Code to be written here
}

【问题讨论】:

标签: java spring jpa entitymanager


【解决方案1】:

从 JPA 2.2 开始,您还可以使用 Java 8 流 API:

entityManager.createQuery("SELECT customer FROM Customer customer", Customer.class)
            .getResultStream()
            .collect(Collectors.toSet());

【讨论】:

    【解决方案2】:

    一种可能的方法是

    entityManager.createQuery("SELECT customer FROM Customer customer",  
                              Customer.class) 
                 .getResultList();
    

    您可以在实体管理器中创建选择查询以使用 JPA 获取结果列表

    【讨论】:

      【解决方案3】:

      您可以编写这样的查询并将 List 转换为 Set:

      public Set<Customer> getCustomers() {
           return new HashSet<Customer>(createQuery("select c from Customer c", Customer.class).getResultList());
      }
      

      【讨论】:

      • 这是如何工作的?我的意思是,实体管理器将所有持久对象存储在哪里?谢谢你的回答
      • 它从您的数据库中获取客户对象,您可以在那里阅读更多相关信息:docs.oracle.com/javaee/6/tutorial/doc/bnbrg.html
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多