我使用 JPA 作为 ORM 映射。我有一个预订表,当前将reservationID 作为其主键。我还有几列,主要是日期、fromTime 和 toTime。
我现在想要的是不允许任何其他同一天且与时间冲突的预订。
示例:
- 12-12-2015 10 14 -- 允许
- 12-12-2015 10 12 -- 不允许
- 12-12-2015 09 10 -- 允许
- 12-12-2015 09 11 -- 不允许
我该怎么办?
- 在子句之间使用
- 将 date + from + to 作为我的表的又一个主键/复合键。
我对这两种方法都感到困惑。哪一种是更好的方法?
最佳答案
这将是 1) Between 子句。
这不是技术问题,而是业务逻辑问题。您希望禁止一项资源发生冲突预订。因此,您必须计算两个时间间隔的重叠。尽管它们没有确切的开始日期和日期,但它们可以重叠。
您可以使用 jodatime 来计算时间间隔的重叠:
Compare Intervals (JodaTime) in a list for overlap
或者您可以只选择重叠的预订:
select * from bookings where from >= parameter_to and to <= parameter_from
其中 parameter_from
和 parameter_to
是 select 的输入参数。
即使在您尝试保留预订之前,这也将是一次业务验证。
关于java - JPA 中可以有多个主键吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244497/