JPQL查询从嵌套的一对多关系中获取特定元素

时间:2016-06-12 13:57:19

标签: java mysql jpa jpql

我试图用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();

我必须在计算中添加保留。我该怎么做?

0 个答案:

没有答案