단순한 다 대다 관계로 결합 된 엔터티 Product 및 Category가 있습니다. 단일 카테고리로 필터링 된 페이지가 매겨진 제품 목록을 얻고 싶습니다. 다음과 유사한 Spring Data JPA
자동 메서드 또는 JPQL
쿼리 메서드 를 작성하려고합니다 SQL
.
select [...] FROM ProductToCategory ptc INNER JOIN Product p ON ptc.product_id=p.id WHERE ptc.category_id=? LIMIT ? OFFSET ?
때문에 ProductToCategory
테이블이 아닌 참여 JPA entity
와 나는 그것을 참조 할 수 없습니다 JPQL
, 내가했다 가지고 올 수있는 가장 가까운 일을 :
@Query("SELECT p FROM Category c INNER JOIN c.products p WHERE c=:category")
Page<Product> findByCategories(@Param("category") Category category, Pageable pageable);
그러나 그 결과는 SQL
중복이 분류 테이블과 조인 생산하고 대신의 범주에,이 where 절을 적용 id
의 ProductToCategory
테이블. 네이티브에 의존하지 않고 이것을 할 수있는 방법이 SQL
있습니까?
내가 볼 수있는 유일한 방법은 엔터티를 조인 테이블에 매핑하고 다 대다 Product <> Category를 Product 및 Category 모두에서이 새 엔터티를 가리키는 일대 다 관계로 바꾸는 것입니다.
이러한 변경은 실제로 Hibernate 모범 사례와 일치합니다.
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/best-practices.html
이국적인 연관 매핑을 사용하지 마십시오 . 실제 다 대다 연관에 대한 실제 테스트 케이스는 드뭅니다. 대부분의 경우 "링크 테이블"에 저장된 추가 정보가 필요합니다. 이 경우 중간 링크 클래스에 대해 두 개의 일대 다 연관을 사용하는 것이 훨씬 좋습니다. 실제로 대부분의 연결은 일대 다 및 다 대일입니다. 따라서 다른 연결 스타일을 사용할 때는 신중하게 진행해야합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다