0

在我的预订实体中,我有一列“bookingDate”-> 示例:“2021-05-10 12:00:00”。

所以在这个对象中显示了用户预订的日期和开始时间。

如果用户想预订时间段,我想先检查所选时间段是否为空。所以我想按日期和开始时间查询数据库。

我用https://www.baeldung.com/spring-data-jpa-query-by-date试过了,但没有用。我收到错误消息:“此位置不允许使用注释 @Temporal”和“@Temporal 不能用于变量”

这些是相关的类:

预订.java

@Entity
public class Reservation {

    @Id @GeneratedValue
    private int reservationId;
    
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime bookingDate;

    private int court = 1;
    

    
    private String playerNames;
    private int userIdReservation;

    //getter and setters

使用方法“findByBookingDate()”我想查询数据库,如果选择的时间段是空的......

验证类.java

        public boolean validateReservation(Reservation r) {
        LocalDateTime tempDate = r.getBookingDate();
        if(reservationRepository.findByBookingDate(tempDate)){ // todo: + and Court
            logger.getLogger().info(this.getClass().getName() + "||Booking Slot is empty -- Reservation created||");
            return true;
        }
        logger.getLogger().info(this.getClass().getName() + "||Booking Slot is full -- Reservation failed||");
        return false;
    }

ReservationRepository.java

@Repository
@Repository
public interface ReservationRepository extends JpaRepository<Reservation, Integer>{

    
@Query("Select r from reservation r where r.booking_date = :tempDate")
     boolean findByBookingDate(@Param("tempDate") LocalDateTime tempDate);

}

如果我像这样运行它,我总是得到一个“org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'backyardcodersSpringReactApplication'的bean时出错” - >所以应用程序没有成功启动。

我非常感谢每一个提示和批评!

干杯!

4

4 回答 4

0

完全没看懂。这只是一个线索,也许不是一个完美的解决方案。

  1. 您可以使用 java.time.LocalDateTime 。和注释就像@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)。

  2. 查询应该是这样的。[查询将检查当天的所有预订]

从 reservation_table 中选择“2021-05-10 00:00:00”和“2021-05-10 23:59:59”之间的时间段</p>

于 2021-05-10T11:49:58.357 回答
0

为什么不直接从 LocalDateTime 中提取 localdate 并将其传递?并提取小时并将其传递并用它查询2个不同的列。

LocalDateTime.toLocalDate()
LocalDateTime.getHour()
于 2021-05-12T11:10:23.417 回答
0

我将您的代码复制到我的本地文件中。代替

导入 org.springframework.data.jpa.repository.Temporal;

我用了

导入 javax.persistence.Temporal;

在你的Reservation.java文件中。

这也是我在 Stackoverflow 上的第一个答案。

于 2021-05-10T13:33:51.790 回答
0

首先@Temporal有三个不同的参数,它可以应用于日期、时间和时间戳类型的变量。

用法

@Temporal(Temporal type.DATE)
private Date date;


@Temporal(Temporal type.TIMESTAMP) // INSERT BOTH DATE WITH TIME TILL MILLISECONDS
private Calendar date;
于 2021-05-10T17:04:38.487 回答