Java 冬眠分页
我有一个带有“null”或“done”标志的项目表,我需要获取带有null标志的项目,处理它们,将标志设置为done 问题是,我想使用分页,在这里我获取500乘500项(空标记) 我的设计如下Java 冬眠分页,java,hibernate,pagination,Java,Hibernate,Pagination,我有一个带有“null”或“done”标志的项目表,我需要获取带有null标志的项目,处理它们,将标志设置为done 问题是,我想使用分页,在这里我获取500乘500项(空标记) 我的设计如下 我从制作人那里拿到500件 让他们排队 一些线程将这些500个项目//发送给消费者 对其进行操作并将标志更新为“完成” 我面临的问题是,消费者的速度非常慢,因此生产商再次获取相同的500个零件,因此我尝试索引,但似乎无法正常工作 public List<Parts> getNParts(int
public List<Parts> getNParts(int listSize) {
try {
criteria = session.createCriteria(Parts.class);
criteria.setFirstResult(DBIndexGuard.getNextIndex()); //index+=500;
criteria.add(Restrictions.isNull("Status"));
criteria.setMaxResults(listSize); //list size is 500;
newPartList = criteria.list();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return newPartList;
}
public List getnpart(int-listSize){
试一试{
条件=session.createCriteria(Parts.class);
criteria.setFirstResult(DBIndexGuard.getNextIndex());//索引+=500;
标准.add(Restrictions.isNull(“Status”);
criteria.setMaxResults(listSize);//列表大小为500;
newPartList=criteria.list();
}捕获(例外e){
e、 printStackTrace();
}最后{
}
返回newPartList;
}
如何实现分页以获取500×500个不同的项目,这些项目的条件为空标记?为生产者-消费者类型的问题创建一个同步的方法,教程可以帮助您。您可以尝试以下实现之一。 1.消除用户端的重复处理。仅当为null时设置为done。 2.通过在放入队列时保持附加状态“进程中”消除生产者上的重复。在生产者查询中排除它们。
3.分页时,按表的主键对记录进行排序,对于后续页面,只查询比上一页最后一条记录的主键大的记录。此问题可以通过包含另一个状态(如“正在处理”)来轻松解决。因此,制作者会将选中的记录标记为-“正在处理”和consumer然后可以处理它们,并将它们的状态设置为“完成”。
在这种情况下,制作人不会选择已经选择的记录。我解决了它,如下所示
if (newPartList.isEmpty() || newPartList.size()<DBIndexGuard.getAllowedListSize()) { // AllowedListSize=500
System.out.println("DataFetcher Sleeping");
inputQueue.offer(newPartList);
DBIndexGuard.resetIndex();
session.clear();
TimeUnit.MINUTES.sleep(10);
}
if(newPartList.isEmpty()|| newPartList.size())如果两个线程都在同一个对象上工作,则同步将起作用。但当它们通过队列通信时,同步将不起作用。@Poorna producer-问题的使用者类型是基于Thread
的。其中producer是一个线程,consumer是另一个线程,并且它们使用相同的方法/对象。如果要通过队列通信,请使用BlockingQueue