0

我刚刚开始在调度应用程序中使用 db4o,我正在寻找一种有效的方法来检索在特定日期之间未预订的房间。

所以,我有一个 Room 对象的集合,每个对象都有一个 Booking 对象的集合(可以是空的)。预订具有开始日期和结束日期。我想说'获取所有在 DateA 和 DateB 之间没有预订的房间'。

我确定我可以使用本机查询来做到这一点,但由于涉及到日期范围(我的理解是日期范围没有针对 NQ 进行优化)并且我需要非常频繁地执行此查询(每秒多次可能超过 10,000房间——其中大部分没有预订)我正在寻找更有效的选择。

有没有办法用 SODA 来表达这个?还是安排我的数据模型以解决此问题的更好方法?

4

1 回答 1

0

是的,您可以使用 SODA Query 来做到这一点

Date fromDate = null ; // assign reservation start dat
Date toDate = null ; // assign reservation upto
Query query = db.query();
query.constrain(Booking.class);
query.descend ("fromDate").constrain ( fromDate ).greater().equal ().
      and (query.descend ("toDate").constrain (toDate).smaller().equal());
ObjectSet<Booking> objectSet = query.execute();

查询fromDate 和 toDate 之间没有预订的所有房间

 Query query = db.query();
query.constrain(Room.class);
query.descend ("bookingStartDate").constrain ( fromDate ).greater().equal ().and
(query.descend ("bookingEndDate").constrain (toDate).smaller().equal()).not();
ObjectSet<Room> objectSet = query.execute();

另请参阅: 构建 SODA 查询

于 2013-01-12T18:22:36.850 回答