java - JPA 中可以有多个主键吗

标签 java mysql jpa

我使用 JPA 作为 ORM 映射。我有一个预订表,当前将reservationID 作为其主键。我还有几列,主要是日期、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 -- 不允许

我该怎么办?

  1. 在子句之间使用
  2. 将 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_fromparameter_to 是 select 的输入参数。

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

关于java - JPA 中可以有多个主键吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244497/

相关文章:

java - 与流被关闭相关的奇怪错误

mysql restore file.sql语法错误使用命令行

mysql - 有正确的方法连接到MySQL吗?

mysql - 我如何在 ruby​​ 中解析这个查询 url

java - 如何在 JPA/Spring-Data JPA 中使用审计?

java - Hibernate 具有相同类的多对多,无法编写 JSON : Infinite recursion

java - 向新 Activity 发送文本

java - 一个 Activity 上的第二个按钮关闭 android 应用程序

java - 使用 Criteria API 加入,在实体映射 "one to one"中

java - 为 CopyOnWriteArrayList 中的添加操作获取锁