我可以在JPA中使用多个主键吗?

时间:2015-12-12 20:16:31

标签: java mysql jpa

我使用JPA作为ORM映射。我有一个目前有reservationID作为主键的预订表。我还有更多的列主要是date,fromTime和toTime。

我现在想要的是同一天的任何其他预订,不应该允许与时间冲突。

的示例:

  1. 12-12-2015 10 14 - 允许
  2. 12-12-2015 10 12 - 不允许
  3. 12-12-2015 09 10 - 允许
  4. 12-12-2015 09 11 - 不允许
  5. 我该怎么办?

    1. 使用条款
    2. 将日期+从+更改为我的表格的另一个主要/复合键。
    3. 我对这两种方法感到困惑。哪一个是更好的方法?

1 个答案:

答案 0 :(得分:2)

在子句之间是1)。

这不是技术问题,而是业务逻辑问题。您想要禁止对一种资源进行冲突预订。因此,您必须计算两个时间间隔的重叠。这些可以重叠,尽管它们没有确切的开始和迄今为止。

您可以使用jodatime计算时间间隔的重叠:

Compare Intervals (JodaTime) in a list for overlap

或者您可以选择重叠预订:

select * from bookings where from >= parameter_to and to <= parameter_from

其中parameter_fromparameter_to是select的输入参数。

即使在您尝试保留预订之前,这也是业务验证。