Web*_*wer 4 java sql oracle hibernate
由于HQL(createQuery)似乎不支持标量查询,因此我通过createSQLQuery使用了原始查询:
session.beginTransaction();
Query query = session.createSQLQuery("select nvl(max(id), 0) + 1 from empty_table_for_now");
session.getTransaction().commit();
List listL = query.list();
Iterator iterator = listL.iterator();
while (iterator.hasNext()) {
LOG.info("Infinite loop. This is disgusting!");
}
Run Code Online (Sandbox Code Playgroud)
查询本身不会失败,但它似乎返回一个包含无限数量结果的列表?这没有意义......任何想法为什么我得到这个?
更好的是,是否有更好,更优雅的方式来获得预期的标量,而不必混淆维护我的代码的人与"列表"(应该总是包含一个元素)?
如果不移动迭代器,则循环肯定是无限的(只要至少有一个元素).
使用Iterator.next()移动迭代器
while (iterator.hasNext()) {
Object nextElement = iterator.next();
LOG.info("Next element is: " + nextElement);
}
Run Code Online (Sandbox Code Playgroud)
也许你在编写代码时考虑了ResultSet.next(),但是迭代器是不同的.看看javadocs.
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |