와 Instant를 사용한 JPA 쿼리가 작동하지 않음
두 날짜 사이에 생성된 데이터(Instant로 표시됨)를 검색하기 위해 쿼리를 작성하려고 합니다.
아래는 사용하고 있는 엔티티에서 발췌한 것입니다.
@Entity
public class HistoricalData {
@Id
@GeneratedValue
private Long id;
@Column
private String name;
@CreationTimestamp
private Instant timestamp;
@Column
private Double price;
}
그리고 두 Instant 간의 데이터를 검색하기 위해 작성한 쿼리입니다.
@Query("select h from HistoricalData h where h.timestamp between :timestampStart and :timestampEnd and upper(name) = upper(:name)")
List<HistoricalData> findHistoricalDataBetween(@NonNull Instant timestampStart, @NonNull Instant timestampEnd, @NonNull String name);
그러면 다음 SQL 쿼리가 생성됩니다.
select historical0_.id as id1_5_, historical0_.price as price2_5_, historical0_.timestamp as timestam3_5_ from historical_data historical0_ where (historical0_.timestamp between ? and ?) and upper(historical0_.name)=upper(?)
또한 "hibernate JPA" 쿼리를 작성했지만 성공하지 못했습니다.
List<HistoricalData> findHistoricalDataByTimestampAfterAndTimestampBeforeAndName(@NonNull Instant timestampStart, @NonNull Instant timestampEnd, @NonNull String name);
위의 모든 쿼리는 올바르게 컴파일되며 예외를 발생시키지 않습니다.데이터베이스에서는 아무것도 취득하지 않습니다.
사용하고 있는 데이터베이스는 MariaDB의 최신 버전이며 커넥터 버전은 2.7.2입니다.또한 사용하고 있는 Spring Boot 버전은 2.5.3입니다.
다음은 테이블 정의의 DDL입니다(휴면 모드에서 자동으로 생성됨).
create table historical_data
(
id bigint not null primary key,
price double null,
timestamp datetime not null,
name varchar not null
);
데이터베이스의 타임스탬프는 다음과 같습니다.
두 Instant 간의 레코드가 데이터베이스에 존재하지만 쿼리 결과로는 아무것도 얻을 수 없습니다.
시간대가 원인인 것 같아요MySQL 드라이버는 연결 시간대 대신 기본 로컬 시간대를 사용하여 잘못된 시간대 변환을 사용합니다(또는 그 반대도 마찬가지입니다.
MySQL 드라이버에서 이 쿼리를 디버깅하기만 하면 재미를 느낄 수 있고 무슨 일이 일어나는지 알 수 있습니다.
데이터베이스 URL에 파라미터를 추가하여 prepare 스테이트먼트에 전달된 실제 값을 확인할 수 있습니다.
jdbc:mysql://<DATABASE_URL>?logger=com.mysql.cj.log.Slf4JLogger&profileSQL=true
언급URL : https://stackoverflow.com/questions/68587500/jpa-query-using-between-and-instant-not-working
'programing' 카테고리의 다른 글
SecurityError: 오리진이 있는 프레임이 교차 오리진 프레임에 액세스하는 것을 차단했습니다. (0) | 2022.10.01 |
---|---|
총 잠금 수가 잠금 테이블 크기를 초과합니다. (0) | 2022.10.01 |
코드 변경 후 magento 셋업 업그레이드를 실행할 때 Mysql 서버가 사라짐 (0) | 2022.09.22 |
strict type은 PHP에서 무엇을 합니까? (0) | 2022.09.22 |
전용 mariadb 서버에 적합한 구성 찾기 - 거대한 innodb 테이블에 적합 (0) | 2022.09.22 |