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 が発生し続けることです。私が見たもう1つの驚くべきことは、以前はコンソールに印刷されたユーザーIDを取得できましたが、ユーザーIDだけで、残りはnullでしたが、このエラーが発生し始めた直後です。データベースにはまったく問題はありません。デバッガーで表示されるため、正しい結果が得られていると 100% 確信していますが、何らかの理由で、通常モードでこのエラーを回避できません。クラス UserModel は単純な POJO であり、そこで Hibernate Annotations を使用しています。

Websphere 8.0 で RAD 8 を使用しています。Hibernate と Primefaces を備えた JSF ライブラリがあります。Spring のライブラリもありますが、今のところまったく使用していません。どんな助けでも大歓迎です。

4

1 に答える 1

0

ループ内で i.next を 2 回呼び出しています。これにより、レコード ポインターが次の要素に移動します。i.next への 1 回の呼び出しで要素への参照を取得します。

だからそれは次のようになるはずです

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

于 2012-07-28T01:21:57.240 に答える