项目还是一样,以一个reservation为例,一个reservation就是一个课程在实际中的体现,它有开始和终止时间还有状态等信息。timeslot就是定义了他的时间,里面有三个字段(timeslotid,start,end,reservationid)。
1。我要查询课程,输入的参数是一个时间段,得到的是一个reservation的列表。我可以这样做
1。我要查询课程,输入的参数是一个时间段,得到的是一个reservation的列表。我可以这样做
- /*
- * (non-javadoc)
- * @see org.pie.vls.application.vlsbase#init()
- */
- public void init() {
- try {
- broker = persistencebrokerfactory.defaultpersistencebroker();
- broker.clearcache();
- //general criteria, with all the query condition
- criteria crit = new criteria();
- criteria crit1 = null;
- list criterialist = new vector();
- //if the reservation id is not 0
- if (resvid > 0) {
- crit.addnotequalto("resvid", new integer(this.resvid));
- }
- iterator iter = this.reservationtimeslotlist.iterator();
- while (iter.hasnext()) {
- //logger.debug ("timeslot -----");
- reservationtimeslot reservationtimeslot = (reservationtimeslot) iter.next();
- /**
- * set the query condition list
- * start and end
- */
- starttimeutc = reservationtimeslot.getstartdatetimeutc();
- endtimeutc = reservationtimeslot.getenddatetimeutc();
- if (this.selecttype == constants.between_reservations) {
- crit1 = new criteria();
- //logger.debug ("between " + starttimeutc + " " + endtimeutc);
- crit1.addbetween("start", starttimeutc, endtimeutc);
- criteria critmore1 = new criteria();
- critmore1.addbetween("end", starttimeutc, endtimeutc);
- criteria critmore2 = new criteria();
- critmore2.addlessorequalthan("start", starttimeutc);
- critmore2.addgreaterorequalthan("end", endtimeutc);
- crit1.addorcriteria(critmore1);
- crit1.addorcriteria(critmore2);
- }
- criterialist.add(crit1.copy(true, true, true));
- }
- if (criterialist.size() > 0) {
- crit1 = new criteria();
- for (int i = 0; i < criterialist.size(); i++) {
- crit1.addorcriteria((criteria) criterialist.get(i));
- }
- crit.addandcriteria(crit1);
- }
- logger.debug(crit);
- querybycriteria tquery = queryfactory.newquery(timeslot.class, crit);
- this.timeslots = broker.getcollectionbyquery(tquery);
- broker.clearcache();
- broker.close();
- } catch (throwable t) {
- logger.error(t.getmessage(), t);
- }
- }
| |
2. 如果我要创建一个reservation,要判断的是当前这个创建的reservation是否与其它的reservation有交叉点的时间,那查询条件就这样修改
- broker = persistencebrokerfactory.defaultpersistencebroker();
- broker.clearcache();
- //general criteria, with all the query condition
- criteria crit = new criteria();
- criteria crit1 = null;
- list criterialist = new vector();
- if (this.selecttype == constants.touching_reservations) {
- crit1 = new criteria();
- /**
- * <p>the start time is in between <code>this.starttimeutc</code> and <code>this.endtimeutc</code>
- */
- crit1.addgreaterorequalthan("start", starttimeutc);
- crit1.addlessorequalthan("start", endtimeutc);
- /**
- * <p>the end time is in between <code>this.starttimeutc</code> and <code>this.endtimeutc</code>
- */
- criteria crit2 = new criteria();
- crit2.addgreaterorequalthan("end", starttimeutc);
- crit2.addlessorequalthan("end", endtimeutc);
- /**
- * <p>the start time is in less than <code>this.starttimeutc</code> and
- * the end time is greater than <code>this.endtimeutc</code>
- */
- criteria crit3 = new criteria();
- crit3.addlessorequalthan("start", starttimeutc);
- crit3.addgreaterorequalthan("end", endtimeutc);
- crit1.addorcriteria(crit2);
- crit1.addorcriteria(crit3);
- }
- criterialist.add(crit1.copy(true, true, true));
- if (criterialist.size() > 0) {
- crit1 = new criteria();
- for (int i = 0; i < criterialist.size(); i++) {
- crit1.addorcriteria((criteria) criterialist.get(i));
- }
- crit.addandcriteria(crit1);
- }
- querybycriteria tquery = queryfactory.newquery(timeslot.class, crit);
- this.timeslots = broker.getcollectionbyquery(tquery);
- broker.clearcache();
- broker.close();
闽公网安备 35060202000074号