Я работаю с Spring Data для версии 2.0.6.RELEASE
Меня смущает следующее о разбиении на страницы и проекции
Класс домена называется Persona, работает с lombok и аннотируется JPA (@Entity и т. д.)
По поводу проекции у меня следующее:
public interface PersonaProjection {
String getId();
String getNombre();
String getApellido();
Date getFecha();
}
По поводу репозитория у меня есть следующее:
interface PersonaDataJpaCrudRepository extends PagingAndSortingRepository<Persona, String> {
Page<PersonaProjection> findAllProjectedBy(Pageable pageable);
}
Пока здесь все работает нормально.
@Controller имеет такой корпус:
@GetMapping(path = "/complete", produces=MediaType.TEXT_HTML_VALUE)
public String findAllComplete(Pageable pageable, Model model){
logger.info("findAllComplete ...");
Page<PersonaProjection> personasPage = personaService.findAll(pageable);
model.addAttribute("personasPage", personasPage);
return "persona/findAllComplete";
}
Представление основано на Thymeleaf и показывает ожидаемые данные.
Практически три дня назад я работал со следующим:
@Query("SELECT p.id, p.nombre, p.apellido, p.fecha FROM Persona p")
Page<PersonaProjection> findAllProjectedBy(Pageable pageable);
Обратите внимание, что у него есть @Query только для наглядности. Это помогает быстро понять, какие поля извлекаются.
И работал нормально, но сегодня просто до того как без каких-либо изменений, практически представление для этих полей остается в blank, без исключения, через консоль через некоторые специальные варианты метода @Controller, которые я могу подтвердить:
Page request [number: 0, size 10, sort: UNSORTED]
PageNumber: 0, PageSize: 10, Offset: 0
Page 1 of 11 containing com.sun.proxy.$Proxy84 instances
Number: 0, NumberOfElements: 10
Size: 10, TotalElements: 107, TotalPages: 11
PageNumber: 0, PageSize: 10, Offset: 0
Результат, показанный выше за предыдущие три дня, представляет собой добавление с участием и без к Query.
Проведя исследование, я нашел для этого класса следующий пример:
Где есть следующий метод:
/**
* Projection interfaces can be used with manually declared queries, too. Make sure you alias the projects matching
* the projection fields.
*
* @return
*/
@Query("select c.firstname as firstname, c.lastname as lastname from Customer c")
Collection<CustomerProjection> findsByProjectedColumns();
Обратите внимание на это примечание:
Make sure you alias the projects matching the projection fields.
Таким образом, если я использую:
@Query("SELECT p.id as id, p.nombre as nombre, p.apellido as apellido, p.fecha as fecha FROM Persona p")
Page<PersonaProjection> findAllProjectedBy(Pageable pageable);
Работает, но обратите внимание, это избыточный, это о том, что псевдоним совпадает с именем поля.
Таким образом, следующие вопросы:
@Query работает несколько дней назад, а теперь нет ?. Здесь моя большая путаница. (Я предполагаю, что здесь задействован com.sun.proxy.$Proxy84 instances)as в @Query? Это нет, задокументированное в разделе 4.3.11. Прогнозы, более того, нет примера, показывающего, что interface projection работает вместе с @Query.Да и нет, в schema ничего не осталось, просто добавлены или вставлены фальшивые записи 100. Изначально было 5 записей, теперь 107. Просто чтобы проверить представление о разбиении на страницы
Я имел в виду версию db, другую БД, вы тестировали ее с помощью H2, а теперь вы переключились на обычную БД или что-то в этом роде
Все в runtime с MySQL, я вручную взаимодействую с веб-приложением через веб-браузер. Тестирование с H2. Но эта ситуация отражается только в представлении, где ожидаемые данные не отображаются, эта часть страницы html отображается пустой или без данных, остальные данные о разбивке на страницы, количестве записей и т. д. Отображаются нормально. Таким образом, все данные о прокси не отображаются в представлении.





Вы меняли базовую базу данных несколько дней назад?