JPA通用存储库,不适用于特定名称

时间:2018-12-21 12:54:55

标签: java spring spring-data-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;
}

我尝试了一个只有一个字符串的虚拟类,在这个类中很好用,  我在调试器中对其进行了测试。

It gets the right class name and respective data in the database

enter image description here

但是,当我尝试为自己创建的实际类进行操作时,我只会得到空值(甚至没有空的set =

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

1 个答案:

答案 0 :(得分:0)

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