2

我有一个数据库表(Hibernate conf 全部完成),

  ResourceRequest( resource, startTime, endTime, status )

在 startTime 和 endTime 之间,资源被占用。

问题陈述: 对于inStartTimeinEndTime的输入,如果下一个可用插槽已被给定插槽占用,我必须找到它。必须为此编写一个休眠查询。

我能想到的一个快速解决方案是: 将给定资源的资源请求查询到一个集合中,然后对其进行操作以获取下一个可用插槽。

但我想把它作为我最后的手段。任何帮助表示赞赏。

谢谢。

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 回答