我可以拥有JPA中的多个主键吗



我使用JPA作为ORM映射。我有一个预订表,它当前以reservationID作为主键。我还有几个专栏,主要是日期,从时间到时间。

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

示例:

  1. 2015年12月12日10 14-允许
  2. 2015年12月12日10 12-不允许
  3. 2015年12月12日09 10-允许
  4. 2015年12月12日09 11——不允许

我该怎么办?

  1. 使用between子句
  2. 使date+from+to成为我的表的又一个主键/复合键

我对这两种方法都感到困惑。哪种方法更好?

这将是1)between子句。

这不是一个技术问题,而是一个业务逻辑问题。您希望禁止一个资源的冲突预订。因此,您必须计算两个时间间隔的重叠。虽然它们没有确切的开始和结束日期,但它们可能会重叠。

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

比较重叠列表中的间隔(JodaTime)

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

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

其中parameter_fromparameter_to是选择的输入参数。

这将是一个业务验证,甚至在你试图坚持预订之前。

最新更新