私はカレンダーとルームエンティティを持っています。日付の間にJPQLチェックボックスが利用可能です
マイカレンダーエンティティは次のようになります。
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。
ユーザーが特定のチェックインとチェックアウト日付の部屋を求めた場合、彼は部屋の正しいリストを取得するようにクエリを作成したいと考えています。
どうすればいいですか?
たとえば、ユーザーはcheckin = 2017-10-6とcheckout = 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