Почему мой код не перебирает мой набор результатов запроса Hibernate? - PullRequest
0 голосов
/ 04 апреля 2011

Я запускаю запрос в Hibernate, который возвращает список из 25 элементов.Затем я перебираю список, чтобы распечатать каждый элемент.Проблема в том, что он печатает первый элемент 25 раз, а не перебирает элементы.

Здесь код для первого класса AnalAction:

package secondary.view;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.hibernate.Session;
import secondary.controller.AnalManager;
import secondary.controller.LocationManager;
import secondary.model.Anal_01;
import secondary.model.LocationMaster;

import com.opensymphony.xwork2.ActionSupport;

public class AnalAction extends ActionSupport implements ServletRequestAware {
private List<LocationMaster> loclist;
    //private List<CustomerMaster> custList;
    //private ArrayList<String> bgroup;
    private ArrayList<String> Location;


public AnalAction()
    {
        linkcontroller=new AnalManager();
        linkcontroller2=new LocationManager();
        //custController=new CustomerMasterManager();

    }


String target="";
    public String execute()
    {
        try{
loclist=linkcontroller2.locList();  //calling from below class LocationManager
        System.out.println("loclist.."+loclist.size());
Location=new ArrayList<String>();
        Iterator<LocationMaster> iter = loclist.iterator();



 while(iter.hasNext())      
   {            
      String  str=iter.next().getLoc_name();
      System.out.println("location   name..:"+str);
      Location.add(str);
      target="Entry";
   }        
System.out.println("location..."+Location);

Здесь LocationManager:

package secondary.controller;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import secondary.model.LocationMaster;
import secondary.util.HibernateUtil;


public class LocationManager extends HibernateUtil {

public LocationManager(){};
@SuppressWarnings("unchecked")
public List<LocationMaster> locList()
{
    Session session=HibernateUtil.getSessionFactory().getCurrentSession();
    Transaction tran=null;
    List<LocationMaster> loc=null;
    try
    {
        tran=session.beginTransaction();
        loc=(List<LocationMaster>) session.createQuery("from LocationMaster    order by loc_code ").list();
        if(loc.size()>0)
        {
            System.out.println("size.....j"+loc.size());

            tran.commit();
        }
    }catch(Exception e){
        e.printStackTrace();
    }
    return loc;
}

}

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

Посмотрите на ваше отображение LocationMaster в спящем режиме.loc содержит 1-й элемент 25 раз, потому что ваш сопоставленный первичный ключ не уникален.

0 голосов
/ 07 апреля 2011

Установите точку останова на if(loc.size()>0) и проверьте loc, чтобы убедиться, что она содержит то, что вы ожидаете, то есть 25 различных записей.

Если это не так, как вы ожидаете, включите ведение журнала SQL, чтобы убедиться, что SQL, который вы ожидаете выполнить, является.

log4j.logger.org.hibernate.SQL=TRACE
...