首页 > 解决方案 > JPA 通用存储库,不适用于某个名称

问题描述

我制作了一个带有 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 (甚至不是一个空集=

最后,我检查了数据库,数据库中的表具有相同的名称,并且匹配。

标签: javaspringspring-data-jpa

解决方案


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


推荐阅读