我有日曆和房間實體。JPQL checkif room在日期間可用
我的日曆實體看起來是這樣的:
public class CalendarEntity {
@EmbeddedId
private CalendarId calendarId = new CalendarId();
@Basic
@Column(name = "available", nullable = false)
private Boolean available;
@Basic
@Column(name = "price")
private double price;
@ManyToOne
@JoinColumn(name = "room_id", referencedColumnName = "id", insertable =
false, updatable = false)
private RoomEntity roomEntity;
}
@Embeddable
public class CalendarId implements Serializable {
@Column(name= "date", nullable = false)
private Date date;
@Column(name = "room_id", nullable = false)
private Integer room_id;
}
我的房間實體看起來是這樣的:
public class RoomEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id", nullable = false, unique = true)
private Integer id;
}
比方說,我在日曆實體日期某些條目2017-10-5, 2017-10-6,2017-10-7,2017-10-8 with room_id = 10。
我想構建一個查詢,以便如果用戶請求具有特定簽入和結帳日期的房間,那麼他將獲得房間的正確列表。
我該怎麼做?
例如,用戶要求籤入= 2017-10-6和結帳= 2017-10-8房間,房間應該出現在列表中。
查詢應該是什麼所以我得到正確的房間清單?
UPDATE:
查詢我對現在只能如果房間可在簽入日期和結賬日期,但不是在間檢查:
select r from RoomEntity r where r.id in (Select c1.calendarId.room_id from CalendarEntity c1, CalendarEntity c2 where (c1.calendarId.room_id = c2.calendarId.room_id) and (c1.calendarId.date =:checkin and c1.available=true) and(c2.calendarId.date =:checkout and c2.available=true))
我不認爲它是一樣的。我想要的是,檢查是否每個日期從入住日期到結帳日期可用。如果是這樣,那麼得到room_id。 – peterthunder
您的問題的答案是我引用的問題的一個小變化,所有您需要做的就是使用帶有NOT EXISTS的子查詢... – crizzis