为什么我的代码没有迭代我的Hibernate查询结果集?

时间:2021-02-15 07:56:30

I am firing a query off to Hibernate which returns a list of 25 elements. I then iterate over the list to print out each element. The problem is that it is printing out the first element 25 times, not iterating through the elements.

我正在向Hibernate发出一个查询,它返回一个包含25个元素的列表。然后我遍历列表以打印出每个元素。问题是它打印出第一个元素25次,而不是迭代元素。

Here the code for the first class AnalAction:

这里是第一类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);

Here is LocationManager:

这是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 个解决方案

#1


0  

Put a breakpoint on if(loc.size()>0) and inspect loc to ensure that it contains what you expect i.e. 25 different entries.

在if(loc.size()> 0)上放置断点并检查loc以确保它包含您期望的内容,即25个不同的条目。

If this isn't as you expect then turn on SQL logging to ensure that the SQL you expect to be executed is.

如果这不符合您的预期,那么打开SQL日志记录以确保您希望执行的SQL是。

log4j.logger.org.hibernate.SQL=TRACE

#2


0  

Take a look at your LocationMaster hibernate mapping. loc contains 1st element 25 times because your mapped primary key is not unique.

看看你的LocationMaster hibernate映射。 loc包含第一个元素25次,因为映射的主键不是唯一的。

#1


0  

Put a breakpoint on if(loc.size()>0) and inspect loc to ensure that it contains what you expect i.e. 25 different entries.

在if(loc.size()> 0)上放置断点并检查loc以确保它包含您期望的内容,即25个不同的条目。

If this isn't as you expect then turn on SQL logging to ensure that the SQL you expect to be executed is.

如果这不符合您的预期,那么打开SQL日志记录以确保您希望执行的SQL是。

log4j.logger.org.hibernate.SQL=TRACE

#2


0  

Take a look at your LocationMaster hibernate mapping. loc contains 1st element 25 times because your mapped primary key is not unique.

看看你的LocationMaster hibernate映射。 loc包含第一个元素25次,因为映射的主键不是唯一的。