#hibernate #spring-data-jpa
#впасть в спящий режим #весна-данные-jpa
Вопрос:
Я ищу аналогичный запрос Hibernate в Jpa.
В режиме гибернации я могу получить все столбцы сопоставленного суперкласса с помощью запроса:
session.createQuery("from com.app.spring.entity.User", User.class);
Как я могу добиться этого с помощью jpa?
Я пробовал использовать SELECT NEW
пользовательский запрос.
Также, если возможно, я хочу получить все записи дочерних классов, вызвав суперкласс, а не только общие атрибуты в суперклассе.
Ответ №1:
Как указано в документации:
Оператор select в JPQL точно такой же, как и для HQL, за исключением того, что JPQL требует a
select_clause
, тогда как HQL этого не делает.
Итак, вы можете исправить свой запрос следующим образом:
List<User> users = entityManager.createQuery(
"select u from com.app.spring.entity.User u", User.class)
.getResultList();
Также, как это объясняется в этом разделе документации:
Запросы HQL и JPQL по своей сути полиморфны.
Этот запрос
User
явно называет объект. Однако все подклассыUser
также доступны для запроса. Итак, если объектыUserA
иUserB
расширяютUser
класс, все три типа будут доступны для запроса сущности, и запрос вернет экземпляры всех трех.
Вы даже можете написать что-то вроде этого:
public interface UserRepository extends CrudRepository<User, Long>
{
@Query("select o from java.lang.Object o")
List<Object> findAllEntities();
}
хотя это не очень практично с точки зрения производительности.
Комментарии:
1. разве это не может быть достигнуто без использования EntityManager. Как это @Query(«ВЫБРАТЬ * ОТ пользователя») Коллекция<Пользователь> findAllActiveUsers();
2. Да, конечно, вы можете использовать
@Query("select u from com.app.spring.entity.User u")
3. но поскольку отображенный суперкласс не является сущностью, он выдает мне ошибку, в которой говорится, что это не сущность
4. Похоже, это просто проблема с вашим отображением, см. Обновленный ответ.
5. при использовании inheritance.joined, как извлекать все строки, как для родительского, так и для дочернего, с помощью jpa-запроса