2012-06-03 3 views
1

브랜드manytomany 엔티티의 네임 쿼리를 만드는 방법은 무엇입니까?

public class Brand implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "BrandID", nullable = false) 
    private Integer brandID; 
    @Basic(optional = false) 
    @Column(name = "BrandName", nullable = false, length = 100) 
    private String brandName; 
    @Basic(optional = false) 
    @Column(name = "Description", nullable = false, length = 1000) 
    private String description; 
    @Column(name = "Is_Visible") 
    private Boolean isVisible; 
    @JoinTable(name = "brandcategory", joinColumns = { 
     @JoinColumn(name = "BrandID", referencedColumnName = "BrandID")}, inverseJoinColumns = { 
     @JoinColumn(name = "CategoryID", referencedColumnName = "CategoryID")}) 
    @ManyToMany(fetch = FetchType.EAGER) 
    private Collection<Category> categoryCollection; 
    @OneToMany(mappedBy = "brand", fetch = FetchType.EAGER) 
    private Collection<Product> productCollection; 

나는 테이블 brandcategory의 whoes의 카테고리 ID를 =에서 브랜드 ID를 가져 오지 싶지는 : 내가 엔티티 브랜드에 대한 쿼리를 createnamed 수있는 방법을 는 카테고리 ID?

이 작동하지 않습니다 엔티티 클래스의 쿼리를 만들 때

@NamedQuery(name = "Brand.getBrandListByCategory", 
      query = "SELECT b FROM Brand b WHERE b.brandID = 
      (SELECT bc.brandID 
      FROM b.brandctegory bc 
      WHERE bc.category.categoryID = :categoryID)") 
+0

무엇이 오류 메시지입니까? – Thor

+0

오류 메시지가 표시되지 않았습니다. n 해결됨 :) –

답변

12

내가 올바르게 이해하면 카테고리에 속한 모든 브랜드가 필요합니다. 당신은 단순히 협회를 양방향으로 만듭니 까? 이 단방향이라면

Category category = em.find(Category.class, categoryId); 
return category.getBrands(); 

은, 다음 쿼리를해야합니다,하지만 당신은 시도 한 것을 매우 간단합니다 : 당신은 단지 할 수

select b from Brand b inner join b.categoryCollection category 
where category.id = :categoryId; 

조회에 이해가되지 않습니다 : 존재하지 않는 연결 (b.brandcategory)을 사용합니다. JPQL은 엔티티, 그들의 영속 필드 및 다른 엔티티와의 연관을 사용한다는 것을 기억하십시오. 그리고 아무것도. 테이블은 JPQL에 존재하지 않습니다.

+0

감사합니다. 나는 JPA를 배워서 실수를 저질렀습니다. Thannnks. :) –

0

AFAIK, 당신은 개체의 경계 밖으로 이동하지 못할.

대신 복잡한 엔터티 관리자의 .createNativeQuery() 메서드를 사용하여 복잡하고 혼합 된 쿼리를 만들 수 있습니다.

+1

물론 엔티티 경계를 벗어날 수 있습니다. 당신이 할 수 없다면 협회는 무엇을 할 것입니까? 이러한 간단한 쿼리에 대한 네이티브 쿼리가 필요하지 않습니다. –

+0

@JBNizet, 글쎄, 나는이 분야의 전문가는 아니다. 그래서 제 지식의 부족을 무시하십시오. – Starx

관련 문제