Я использовал его для хранения объектов с файлами с памятью. Конкретным примером была база данных изображений, которая обрабатывала большое количество больших изображений (больше, чем могла бы поместиться в память).
Вам нужно использовать Основанные на интерфейсе проекции :
Вам нужно будет создать интерфейс, который определяет получатели для каждого поля в вашей проекции, например:
public interface RequestJoinRunProjection {
int getId();
LocalDate getRequestTime();
String getMessage();
String getRequestDay();
Long getHowLongAgo();
}
[ 118] Затем вы определяете метод в вашем репозитории, у которого есть собственный запрос, который вы хотите выполнить:
public interface TestRequestRepository extends CrudRepository<TestRequest, Long> {
// Any other custom method for TestRequest entity
@Query(value = "SELECT trq.Id AS id " +
" , trq.RequestTime AS requestTime " +
" , DAYNAME(trq.RequestTime) AS requestDay " +
" , trq.StatusMessage AS statusMessage " +
" , DATEDIFF(YEAR, CURDATE(), trq.RequestTime) AS howLongAgo " +
"FROM TestRequest trq " +
" LEFT JOIN TestRun tr " +
" ON trq.TestRunId = tr.Id " +
"WHERE Requestor = ?1 ORDER BY Id DESC"), nativeQuery = true)
List<RequestJoinRunProjection> findTestSumary(String name);
}
Запрос уведомления должен быть собственным, так как вы используете функции базы данных, также имена столбцов должны соответствовать установщикам ваш интерфейс проекции (следуя правилам bean), поэтому используйте AS
для изменения имен в вашем запросе.
Я настоятельно рекомендую вам протестировать ваш запрос на h2, прежде чем вводить в @Query
аннотацию. DATEDIFF
требуется 3 параметра.