Java Spring 查询

标签 java spring spring-mvc spring-data h2

我想查询 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/

相关文章:

java - 如何从特定页面或类似页面上的命令行打开Word文档

spring - 不允许使用 Apache Camel REST DSL 405 方法

java - Spring 数据 JPA : case insensitive orderBy

java - Java 中将基元或对象放入对象映射中的区别

java - JSP 使用服务器时区显示服务器日期和时间

java - Spring 数据JPA : overriding toPredicate when inner object's variable is criteria

java - 在组件构造函数上使用 `@Lazy` 等于注释每个参数吗?

java - 如何按最新日期对列表进行排序?

java - 逐渐填充InputStream并用SpringMVC返回

java - Restful Spring postForObject 缺少所有属性值