在 Java 中使用 EntityManager 返回计数本机查询的结果?

Returning result of count native query using EntityManager in Java?

我有以下SQL Query :

SELECT COUNT(*) FROM DOG where ID = 'SampleId';

我正在尝试在 java 中写这个:

public int returnCountOfDogTable(String id){

        String sql= "SELECT COUNT(*) FROM DOG WHERE ID =:id";
        Query query = persistence.entityManager().createNativeQuery(sql);
        query.setParameter("id", id);
        List<Integer> resultList = query.getResultList();
        int result = resultList.get(0);
        return result;
    }

但是我遇到了这个异常:

java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer

我该如何解决这个问题?

试试这个:

public int returnCountOfDogTable(String id) {
//...
    List<BigDecimal> resultList = query.getResultList();
    BigDecimal result = resultList.get(0);
    return result.toIntValue();
}

使用 Query#getSingleResult 方法有意义:

Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM DOG WHERE ID =:id");
query.setParameter("id", 1);
int count = ((BigInteger) query.getSingleResult()).intValue();

您也可以使用 Number 并调用 intValue():

Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM DOG WHERE ID =:id");
query.setParameter("id", 1);
int count = ((Number) query.getSingleResult()).intValue();
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@PersistenceContext
protected EntityManager em;

public int getCountQuery(String sql) {
    int resultCount = 0;
    try {
        Query query = em.createNativeQuery(sql);
        resultCount = ((Number) query.getSingleResult()).intValue();
    } catch (Exception e) {
        log.error("SQL Error" + e.getMessage());
    }
    return resultCount;
}