【问题标题】:JPA generic repository, not working for a certain nameJPA 通用存储库,不适用于某个名称
【发布时间】:2018-12-21 12:54:55
【问题描述】:

我创建了一个带有 JPA 集成的 Jax-RS 端点,我尝试根据通用名称进行查询,以创建查询,从数据库中获取数据。

@Override public Set<E> get() {
    EntityManager em = emf.createEntityManager();
    List<E> results = null;

    try {
        results = em.createQuery("SELECT e FROM " + entityClass.getSimpleName() + " e", entityClass)
                    .getResultList();
    } finally {
        em.close();
        return new HashSet<E>(results);
    }
}

当我创建我的存储库的实例时,我在 SQL 数据库中指定类名和主键(通常是整数)

public class BaseRepository<E, PK> implements CRUDOperations<E, PK> {

    private   Class<E> entityClass;
    protected EntityManagerFactory emf;
}

我尝试了一个虚拟类,只有一个字符串,它工作正常, 我在调试器中测试过。

但是,当我尝试为我创建的实际类执行此操作时,我只是返回 null(甚至不是空集=

最后,我查了下数据库,发现数据库中的表同名,而且匹配。

【问题讨论】:

  • 我建议在try-block中返回你的hashset,即使返回finally-block也会被调用。
  • 为什么会首选?
  • 因为你抑制了一个最有可能发生在你的代码中的异常以及你得到null的原因
  • 有道理,我会改的
  • 这和spring数据有什么关系?

标签: java spring spring-data-jpa


【解决方案1】:

原因是我没有为实体类添加无参数构造函数,因此无法从数据库中获取一组实体。

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 2018-08-27
    • 2016-07-12
    • 1970-01-01
    • 2013-11-08
    • 2017-11-13
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多