以下は、クエリを呼び出すメソッドです。
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 のライブラリもありますが、今のところまったく使用していません。どんな助けでも大歓迎です。