-2

クラス A のリストを処理しようとしています。

方法:

public List<A> get(String var) {    
List  <A> list= new ArrayList <A>();
A obj = new A();
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Criteria criteria = session.createCriteria(A.class);
criteria.add(Restrictions.eq("name", var)); 
Iterator<A> it = (Iterator<A>) criteria.list().iterator();
while(it.hasNext())
{
obj = it.next();
list.add(obj);
}
return list;
}

メソッド呼び出し:

List  <A> list2= new ArrayList <A>();
list2 = get (var);

デバッグ時に、リストの値を確認できます。問題は list2 が空であることです。なぜこうなった?

4

1 に答える 1

0

list2 は空なので

   public List<A> get(String var)

空のリストを返します。

最初の行

    List  <A> list2= new ArrayList <A>();
    list2 = get (var);

get() の結果でオーバーライドされます。

UPD

criteria.list() を 2 回呼び出します。

これを削除します:

Iterator<A> it = (Iterator<A>) criteria.list().iterator();
while(it.hasNext())
{
obj = it.next();
list.add(obj);
}

実際には ConcurrentModificationException を取得する必要がありますが、とにかくこれは間違っています。

UPD2

これを試して:

public List<A> get(String var) {
    Session session = this.getHibernateTemplate().getSessionFactory()
            .openSession();
    Criteria criteria = session.createCriteria(A.class);
    criteria.add(Restrictions.eq("name", var));
    return criteria.list();
}


List<A> list2 = get (var);
于 2013-04-09T18:02:55.957 に答える