2017-06-26 44 views
0

我一直在尝试使用休眠计数行数,但我一直收到“0”记录。这里是我的代码使用休眠计数行或记录

public static Integer getLastDrugId(){ 
    Integer result = 0; 
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    Transaction tx = null; 
    try{ 
     tx = session.beginTransaction(); 
     String hql = "SELECT count(*) FROM Drug"; 
     Query query = session.createQuery(hql); 
     Integer e = (Integer) query.iterate().next(); 
     if (e != null) { 
      result = 1; 
     } 

    } catch (Exception ex) { 
     if (tx != null) { 
      tx.rollback(); 
     } 
    } finally { 
     session.close(); 
    } 
    return result; 
} 

我在某处错了吗?

+0

你检查,如果你得到一个异常?你可能应该添加一个记录器,让它在你的catch块中打印栈跟踪,不要错过它。 –

+0

我在某种程度上是新的计数行。但是在打印stacktrace后,我得到了这个错误“java.lang.Long不能转换为java.lang.Integer”。但我并没有在我的代码中使用Long。 –

+0

看起来像你的查询返回一个Long,所以你必须按照这样的方式接收它。如果需要将结果作为Integer,则可以通过在查询返回的Long上调用intValue()来手动进行转换。 –

回答

1

替换此行:

Integer e = (Integer) query.iterate().next(); 

蒙山这样的:

Long e = (Long) query.iterate().next(); 
+0

谢谢!这工作起初,但现在它不断返回只是一个记录,我有两个记录 –

+0

如何计数(*)返回两个记录(在上面的查询)? 'SELECT count(*)FROM Drug;'在数据库中运行并自行查看。 –

+0

林新来这个,所以我真的不明白它是如何工作的。好吧,我想返回多个记录。我想使用记录的数量作为ID,就像我有一个记录,下一个ID应该是“2”。 –