我使用JPA作为ORM映射。我有一个预订表,它当前以reservationID作为主键。我还有几个专栏,主要是日期,从时间到时间。
我现在想要的是同一天的任何其他预订,与时间冲突都是不允许的。
示例:
- 2015年12月12日10 14-允许
- 2015年12月12日10 12-不允许
- 2015年12月12日09 10-允许
- 2015年12月12日09 11——不允许
我该怎么办?
- 使用between子句
- 使date+from+to成为我的表的又一个主键/复合键
我对这两种方法都感到困惑。哪种方法更好?
这将是1)between子句。
这不是一个技术问题,而是一个业务逻辑问题。您希望禁止一个资源的冲突预订。因此,您必须计算两个时间间隔的重叠。虽然它们没有确切的开始和结束日期,但它们可能会重叠。
您可以使用jodatime来计算时间间隔的重叠:
比较重叠列表中的间隔(JodaTime)
或者您可以选择重叠预订:
select * from bookings where from >= parameter_to and to <= parameter_from
其中parameter_from
和parameter_to
是选择的输入参数。
这将是一个业务验证,甚至在你试图坚持预订之前。