Я пытаюсь запросить последние 5 цифр числового поля из базы данных Oracle в репозитории Springboot / JPA.
В Oracle работает следующий запрос:
Select * FROM DP1_Attachments Where trim(substr(dp1_submit_date_dp1_number, -5, 5)) = [a-five-digit-number]
Я пытался реализовать следующее:
ENTITY:
@IdClass(CompositeKey.class)
public class DP1Attachments {
@Id
private Integer attachmentsFolder;
@Id
private Integer attachmentNumber;
private Integer dp1SubmitDateDp1Number;
private String attachmentName;
private Integer attachmentSize;
private String attachmentType;
@JsonFormat(pattern = "MM/dd/yyyy HH:mm")
private LocalDateTime attachmentDate;
private String attachmentBy;
private Integer attachmentByUsersId;
private String attachmentActive;
private String modifiedBy;
private Integer modifiedByUsersId;
@JsonFormat(pattern = "MM/dd/yyyy HH:mm")
private LocalDateTime modifiedDate;
СКЛАД
@Query("SELECT a FROM DP1Attachments a WHERE trim(substring(a.dp1SubmitDateDp1Number, -5, 5)) = :dp1Number")
List<DP1Attachments> queryByDp1SubmitDateDp1Number(@Param("dp1Number") String dp1Number);
}
СЕРВИС
public List<DP1Attachments> getAttachmentsList (String dp1Number){
return attachmentsRepository.queryByDp1SubmitDateDp1Number(dp1Number);
}
CONTROLLER
public ResponseEntity<?> getAttachmentsInFolder (@PathVariable String attachmentFolder){
List<DP1Attachments>files = attachmentsService.getAttachmentsList(attachmentFolder);
return new ResponseEntity<>(files, HttpStatus.OK);
}
Запрос выполняется, но возвращает пустой массив.
Я также попытался изменить подстроку на оператор LIKE:
@Query("SELECT a FROM DP1Attachments a WHERE TO_CHAR(a.dp1SubmitDateDp1Number) like :dp1Number")
List<DP1Attachments> queryByDp1SubmitDateDp1Number(@Param("dp1Number") String dp1Number);
И услуга изменилась на:
public List<DP1Attachments> getAttachmentsList (String dp1Number){
return attachmentsRepository.queryByDp1SubmitDateDp1Number("%" + dp1Number);
}
Это также работает без ошибок, но возвращает пустой массив.