0

以下是调用查询的方法:

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。我看到的另一件令人惊讶的事情是,以前我能够在控制台上打印用户 ID,但只有用户 ID,其余部分为空,但在我开始收到此错误后不久。数据库完全没有问题。我 100% 确信我得到了正确的结果,因为我在调试器中看到了它,但由于某种原因,我无法在正常模式下克服这个错误。UserModel 类是一个简单的 POJO,我在那里使用 Hibernate Annotations。

我将 RAD 8 与 Websphere 8.0 一起使用。有带有 Hibernate 和 Primefaces 的 JSF 库。还有 Spring 库,但到目前为止我还没有使用过它们。任何帮助将不胜感激。

4

1 回答 1

0

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

所以应该像

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

于 2012-07-28T01:21:57.240 回答