0

スケジューリング アプリケーションで db4o を使い始めたばかりで、特定の日付の間に予約されていない部屋を効率的に取得する方法を探しています。

そのため、Room オブジェクトのコレクションがあり、それぞれに Booking オブジェクトのコレクションがあります (空の場合もあります)。予約には、開始日と終了日があります。「DateA と DateB の間に予約がないすべての部屋を取得する」と言いたいです。

ネイティブクエリを使用してこれを行うことができると確信していますが、日付範囲が関係しているため (日付範囲は NQ 用に最適化されていないことを理解しています)、このクエリを非常に頻繁に実行する必要があります (潜在的に 10,000 を超える可能性があるため、1 秒あたり何度も実行する必要があります)。部屋 - その大部分には予約がありません) より効率的な代替手段を探しています。

SODAを使用してこれを表現する方法はありますか? または、この問題を回避するためにデータ モデルを調整するより良い方法はありますか?

4

1 に答える 1

0

はい、SODAクエリを使用してこれを行うことができます

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 に答える