#java #spring #hibernate #jpql
Вопрос:
только что переключился на весеннюю загрузку с .NET Core, в .NET core мы можем легко вложить выбор внутри выбора, подобного этому:
var result = from c in context.Cars
join br in context.Brands
on c.BrandId equals br.Id
join col in context.Colors
on c.ColorId equals col.Id
select new CarDetailDto
{
Id = c.Id,
BrandName = br.Name,
CarName = c.Name,
ColorName = col.Name,
DailyPrice = c.DailyPrice,
ModelYear = c.ModelYear,
CarImages = (from cimg in context.CarImages
where cimg.CarId == c.Id
select new CarImage
{
Id = cimg.Id,
ImagePath = cimg.ImagePath,
CarId = c.Id,
Date = cimg.Date
}).ToList()
};
Я тоже хочу сделать это в JPQL, но не смог решить
Комментарии:
1. Что именно вы пытались сделать?
2. У меня есть сущность, в которой есть один ко многим внутри. Как и резюме с опытом работы , я должен JsonIgnore его из-за бесконечной рекурсии, я хочу получить список опыта работы внутри информации о резюме в DTO с аннотацией @Query, но я не мог написать, что JPQL В основном я хочу перевести этот запрос .NET поверх запроса JPQL
Ответ №1:
@Query( select column1, column2, column3 from tablename1 where coluname=(select columname from tablename2 where columnname=abcd) )
Ваш JPQL-запрос должен выглядеть так, как описано выше.
Какой бы подзапрос вы ни написали с условием.
Если ваш запрос содержит 3 столбца, вам необходимо создать DTO с тем же именем столбца.
Если ваш запрос содержит список строк, то ваш фактический jpql будет выглядеть следующим образом.
@Query( select column1, column2, column3 from tablename1 where coluname=
(select columname from tablename2 where columnname=abcd) )
List<ResultDTO> findAllResultList(Parameter value);
Выше он отображает результат в список объектов DTO для строк результатов.
Если ваш запрос извлекает одну строку, то ваш фактический jpql будет выглядеть следующим образом.
@Query( select column1, column2, column3 from tablename1 where coluname=
(select columname from tablename2 where columnname=abcd) )
ResultDTO findResult(Parameter value);
Один результат сопоставляется с одним объектом DTO.
Убедитесь, что имя столбца результатов и имя столбца DTO совпадают, используя репозиторий JPA, чтобы вызвать имена метода, который вы использовали для конкретного запроса.