Получить список «прокси-объектов hibernate» с помощью «Jpa-запроса Spring Data» - PullRequest
0 голосов
/ 02 марта 2019

Можно ли как-то получить список прокси-объектов Hibernate с помощью Jpa-запроса Spring Data?

У меня есть идентификаторы объектов из запроса, и я не хочучтобы получить их (потому что в сущности много отношений OneToOne), но я хочу получить их прокси, которые будут содержать их идентификаторы (мне это нужно для отношения).Я хочу что-то вроде Hibernate findOne() или getOne(), но для результата списка.

Любое предложение будет оценено, спасибо!

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Правильным решением является использование экземпляра EntityManager.

entityManager.getReference(YourClass.class, id);

Поскольку этот метод принимает только один идентификатор, вам необходимо написать собственный запрос SQL (используя HQLили нативное SQL) для получения только идентификаторов необходимых объектов.

Имея List<T> ids, вы можете

final List<YourClass> proxyValues = 
         ids.stream()
            .map(id -> entityManager.getReference(YourClass.class, id))
            .collect(Collectors.toList());

Говоря о производительности,это совершенно нормально, так как доступ к базе данных будет осуществляться один раз, извлекая небольшой объем данных.

0 голосов
/ 02 марта 2019

Если я правильно понимаю ваши вопросы, вы захотите сделать что-то вроде этого:

Геопространственные запросы к репозиторию (не требует аннотации @Query)

public interface PersonRepository extends JpaRepository<Person, String>
List<Person> findByLocationNear(String location, Integer distance);
List<Person> findByCity(String city);
}

Однако вы также можете использовать JQL Query Methods в своем хранилище

@Query("SELECT p FROM Person t WHERE p.name =?1 AND p.location=?2 ") 
List<Person> findPersonByLocation(String fName, String location);

Также вы можете использовать HQL

...