我想查询 buy 我没有访问 h2 数据库模式的权限,所以我不知道连接属性是如何命名的。 我基本上想在某个日期间隔内查询酒店的可用房间。为此,我需要进行如下查询:
Select Room
From Room Inner Join Booking On Room.Id = Booking.RoomId Inner Join RoomType On RoomType.Id = Room.RoomTypeId
Where NOT ((Booking.beginDate >= @initDate And Booking.beginDate <= @endtDate) or (Booking.beginDate >= @initDate And Booking.endDate <= @endDate)
or (Booking.beginDate <= @initDate and Booking.endDate >= @endDate)) and Booking.Approved = 1 and RoomType.Id = @roomType)
在 java spring 中:
@Query(........)
Iterable<Room> findAvaiableRooms(Date initDate, Date endDate, long roomType);
######## The Entities #######
@Entity
public class Booking {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private Date beginDate;
private Date endDate;
private boolean aproved;
@ManyToOne
private Room room;
}
@Entity
public class Room {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@ManyToOne
private RoomType roomType;
@OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="room", orphanRemoval = true)
private Collection<Booking> bookings = new ArrayList<Booking>();
}
@Entity
public class RoomType {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String type;
private int price;
private int numberOfRooms;
@OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="roomType", orphanRemoval = true)
private Collection<Room> rooms = new ArrayList<Room>();
}
我真的不知道应该如何查询才能与数据库保持一致。
最佳答案
您拥有所有这些 ORM 注释这一事实使我相信您正在使用 Hibernate。
我建议您忘掉 ORM,直到您能够更自如地自己动手。
您依赖 Hibernate 为您创建表格,但没有完全理解它将为您提供什么。
您不知道如何编写 JOIN,所以您依赖于 Hibernate 为您生成的 SQL。
手动创建表格。编写一个使用您手工编写的 SQL 的数据访问类。手动将这些结果映射到您的对象中。
完成后,您就会真正理解问题所在。
您会欣赏(或鄙视)Hibernate 为您提供的功能,并了解它如何更好地工作。
关于Java Spring 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33679782/