【问题标题】:Returning result of count native query using EntityManager in Java?在 Java 中使用 EntityManager 返回计数本机查询的结果?
【发布时间】:2016-10-04 16:13:00
【问题描述】:

我有以下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

我该如何解决这个问题?

【问题讨论】:

    标签: java integer entitymanager classcastexception


    【解决方案1】:

    您也可以使用Number 并致电intValue()

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

    【讨论】:

      【解决方案2】:

      使用 Query#getSingleResult 方法有意义:

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

      【讨论】:

        【解决方案3】:

        试试这个:

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

        【讨论】:

        • 好的,然后如何将返回值中的大十进制改回int?
        • 也许是result.toIntValue() ?
        【解决方案4】:
        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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-08
          • 2020-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-09
          • 2021-03-29
          • 1970-01-01
          相关资源
          最近更新 更多