使用hibernate和JSF时java.util.NoSuchElementException

时间:2012-07-28 00:56:14

标签: java hibernate jsf primefaces websphere

以下是调用查询的方法:

public void LogIn() {
        Query query = null;

        session.beginTransaction();
        query = session
                .createQuery(" from UserModel where userName = :username and passwd = :password");
        query.setString("username", getUserVO().getUserName());
        query.setString("password", getUserVO().getPasswd());

        this.getUserVO().DataRowMapper((List<UserModel>) query.list());
        session.getTransaction().commit();
        session.close();
    }

@Override
    public void DataRowMapper(List<?> list) {
        Iterator<UserModel> i = (Iterator<UserModel>) list.iterator();
        while (i.hasNext()) {
            this.setUserID(i.next().getUserID());
            this.setUserName(i.next().getUserName());
        }

现在的问题是,当我运行调试器时,我看到i.hasNext()具有正确的值但仍然一直得到NoElementException。我看到的另一个令人惊讶的事情是,之前我能够在Console上打印UserID,但只是UserID,其余部分为null,但在我开始收到此错误后不久。数据库完全没有问题。我100%确信我得到了正确的结果,因为我在调试器中看到它但由于某种原因我无法在正常模式下通过此错误。 UserModel类是一个简单的POJO,我在那里使用Hibernate Annotations。

我正在使用RAD 8和Websphere 8.0。有一些带有Hibernate和Primefaces的JSF库。还有Spring库,但到目前为止我还没有使用它们。任何帮助都应该受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

你在循环中调用i.next两次,它将把记录指针移动到下一个元素。通过一次调用i.next来获取对元素的引用。

所以它应该像

while (i.hasNext){ usermodel curr =i.next; curr.username; curr.userid; }