2

私はdbテーブルを持っています(Hibernate confはすべて完了しました)、

  ResourceRequest( resource, startTime, endTime, status )

startTimeとendTimeの間で、リソースが占有されています。

問題の説明:inStartTimeinEndTime の入力について、指定されたスロットですでに使用されている場合は、次に使用可能なスロットを見つける必要があります。このために休止状態のクエリを作成する必要があります。

私が考えることができる1つの簡単な解決策は 、特定のリソースのresourcerequestsをコレクションにクエリし、それを操作して次の使用可能なスロットを取得することです。

しかし、私はそれを私の最後の手段として持ちたいと思っています。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

2

SQLで

SELECT * FROM slots s1 WHERE
    s1.endTime > :inStartTime AND
    not exists (SELECT 1 FROM slots s2 WHERE s2.startTime > s1.endTime AND s2.startTime < DateAdd(s1.endTime, :inEndMinusInStart))
ORDER BY
    s1.startTime


// and criteria to tweak

DetachedCriteria subquery = DetachedCriteria.for(Slot.class)
    .add(<filter on resource>)
    .add(Restrictions.propertyGt("startTime", "s1.endTime"));
    .add(Restrictions.propertylt("startTime", Projections.sqlFunction("dateadd", Projections.property("s1.endTime"), inStartTime - inEndTime, Hibernate.dateTime));

session.createCriteria(Slot.class, "s1")
    .add(<filter on resource>)
    .add(Restrictions.gt(endTime, inStartTime))
    .add(Subqueries.notExists(subquery))

それが役に立てば幸い

于 2012-08-14T07:12:21.853 に答える