我试图用jpa描述一个系统。系统设置如下: 实体是:公寓,房间和预订。 公寓可以有多个房间,房间可以有多个预订。
相关代码如下:
公寓实体
@Entity
public class Apartman {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="idapartman")
@Basic(optional = false)
private int idapartman;
...
@OneToMany(mappedBy = "apartman", cascade = CascadeType.ALL)
private Collection<Soba> rooms;
...
房间实体
@Entity
public class Soba implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="idroom")
private int idroom;
@ManyToOne
@JoinColumn(name = "idapartman", nullable=false)
private Apartman apartman;
@OneToMany(mappedBy = "room", cascade = CascadeType.ALL)
private Collection<Reservation> reservations= new ArrayList<Reservation>();
预订实体
@Entity
public class Reservationimplements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="idrservation")
private int idrservation;
@Column(name="dateIn")
@Temporal(DATE)
private Date dateIn;
@Column(name="dateOut")
@Temporal(DATE)
private Date dateOut;
@ManyToOne
@JoinColumn(name = "idroom", nullable=false)
private Room room;
我想要做的是将所有房间都放在给定名称的公寓内,该公寓不具有与给定日期范围重叠的预订。 每个预订都有入住日期和退房日期。 用户输入公寓名称,日期和日期。
我想这样做: 使用给定名称过滤属于公寓的房间 对于每个房间,请检查所有预订,并且只留下任何预订中没有重叠的房间,包括进出日期。
目前我只从公寓取得房间,就像这样
return em.createQuery("SELECT s FROM Apartman a JOIN a.sobe s WHERE a.name= :name).setParameter("name", name).getResultList();
我必须在计算中添加保留。我该怎么做?