Я использую Spring boot + jpa + H2 для этого проекта.
Мне нужно получить строки, перекрывающиеся с заданным диапазоном, поэтому я построил запрос, который проверяет в разделе, находятся ли поля dateFrom и dateTo в полученном диапазоне, но я получаю эту ошибку.
Я очень озадачен этой ошибкой, потому что я работаю только с объектами Date в Java, и я сохранил даты точно так же, как и Dates в базе данных. Но в консоли похоже, что он пытается обработать его как VARCHAR.
Это мой класс модели:
package com.campsite.reservations.model;
imports
@Entity
@Table(name = "reservations")
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "reservation_code")
private String reservationCode;
@Column(name = "user_id")
private long userId;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="place_id")
private Place place;
@Column(name = "date_from")
private Date dateFrom;
@Column(name = "date_to")
private Date dateTo;
GETTERS Y SETTER`S
}
А это мой репозиторий. Запрос:
@Query(
value = "select * FROM Reservations res "+
"where ((res.date_from >= ?1 || res.date_from <= ?2) "+
"|| (res.date_to >= ?1 || res.date_to <= ?2))",
nativeQuery = true)
List<Reservation> findOverlapings(Date dateFrom, Date dateTo);
Я использую загрузку Spring, поэтому моя консоль выглядит немного плохо.
Консольные сообщения:
2018-11-15 02:44:19.227 DEBUG 9201 --- [nio-8090-exec-1] m.m.a.RequestResponseBodyMethodProcessor : Read [class com.campsite.reservations.model.Reservation] as "application/json;charset=UTF-8" with [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@5b5b53c6]
2018-11-15 02:44:24.271 INFO 9201 --- [nio-8090-exec-1] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select reservatio0_.id as id1_1_, reservatio0_.date_from as date_fro2_1_, reservatio0_.date_to as date_to3_1_, reservatio0_.place_id as place_id6_1_, reservatio0_.reservation_code as reservat4_1_, reservatio0_.user_id as user_id5_1_ from reservations reservatio0_ left outer join places place1_ on reservatio0_.place_id=place1_.id where place1_.id=? and reservatio0_.date_from=? and reservatio0_.date_to=?
Hibernate: select * FROM Reservations res where ((res.date_from >= ? || res.date_from <= ?) || (res.date_to >= ? || res.date_to <= ?))
2018-11-15 02:44:27.595 WARN 9201 --- [nio-8090-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 22007, SQLState: 22007
2018-11-15 02:44:27.598 ERROR 9201 --- [nio-8090-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Cannot parse "TIMESTAMP" constant "2018-11-01 21:00:00.02018-10-31 21:00:00.0"; SQL statement:
select * FROM Reservations res where ((res.date_from >= ? || res.date_from <= ?) || (res.date_to >= ? || res.date_to <= ?)) [22007-196]
2018-11-15 07:51:26.564 DEBUG 11342 --- [nio-8090-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Written [CampsiteErrorResponse{status=500, message='could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not extract ResultSet', errors=[could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not extract ResultSet]}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@2b2b7e3c]