#java #spring-boot #jpa #jpql
Вопрос:
продукт: идентификатор, имя, @ManyToOne() Идентификатор категории, @ManyToOne() брендИд
категория: идентификатор,имя, товары @OneToMany()
бренд: идентификатор,имя, @OneToMany() товары
у меня есть такие права. поэтому я хочу создать dto для продукта.
например;
productDto: название,название категории
таким образом, я могу создать запрос @Query("Select dtoPath.productDto(p.name,c.name) From Category c Inner Join c.products p")
но я хочу, чтобы мне понравилось;
- productDto: название,категория,фирменное наименование
как я могу добавить соединение для запроса бренда?
Ответ №1:
Вы можете просматривать однозначные отношения в JPQL, и JPA позаботится о соединениях:
SELECT dtoPath.productDto(p.name, p.categoryId.name, p.brandId.name)
FROM Product p
WHERE ...
Если вам нужны все продукты, просто опустите этот WHERE
пункт. Если вы хотите, чтобы все товары относились к определенной категории, попробуйте WHERE p.categoryId=:category
(и передайте всю Category
сущность) или WHERE p.categoryId.id=:categoryId
(и передайте только идентификатор категории).
(Неуместное предложение, не добавляйте Id
к названию свойств отношения Product.categoryId
и Product.brandId
)