为什么我的代码没有迭代 Hibernate 查询结果集?
我向 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;
}
}
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.
Here the code for the first class 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
:
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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在
if(loc.size()>0)
上放置断点并检查loc
以确保它包含您期望的内容,即 25 个不同的条目。如果这与您期望的不符,则打开 SQL 日志记录以确保执行您期望执行的 SQL。
Put a breakpoint on
if(loc.size()>0)
and inspectloc
to ensure that it contains what you expect i.e. 25 different entries.If this isn't as you expect then turn on SQL logging to ensure that the SQL you expect to be executed is.
查看您的 LocationMaster 休眠映射。
loc 包含第一个元素 25 次,因为您的映射主键不是唯一的。
Take a look at your LocationMaster hibernate mapping.
loc contains 1st element 25 times because your mapped primary key is not unique.