2011-11-18 2 views
0

검색어를 작성하는 데 도움주세요! 공통 상위 개체를 통해 categoriesId별로 모든 태그를 선택해야합니다.JPA QueryBuilder

나는이 다음 :

@Table(name="ADVERT") 
@Entity(name="Advert") 
public class JpaAdvert implements Advert{ 

@Id 
@GeneratedValue 
private long id; 

@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name="category_id", referencedColumnName="id") 
private JpaCategory category = new JpaCategory(); 

@ManyToMany(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE}) 
@JoinTable(name="ADVERT_TAGS", [email protected](name="advert_id",referencedColumnName="id"), [email protected](name="tag_id", referencedColumnName="id")) 
private Set<JpaTag> tags = new HashSet<JpaTag>(); 

... 

태그 개체 :

@Entity(name="Tag") 
@Table(name="TAG") 
public class JpaTag implements Tag { 

@Id 
@GeneratedValue 
private long id; 

private String name; 

private long weight=1; 

private String locale; 

.... 

및 범주 개체 :

@Table(name="CATEGORY") 
@Entity(name="Category") 
public class JpaCategory implements Category { 

@Id 
@GeneratedValue 
private long id; 

@Column(name="category_name") 
private String categoryName; 

..... 

그래서 내가 특정 범주에 속하는 모든 태그를 선택해야합니다 카테고리 ID로. 그것을하는 방법 조금 복잡합니다!

누구든지 도와주세요!

답변

2

이 기준을 사용할 필요는 없습니다. 변수 검색 기준에 따라 동적으로 쿼리를 작성하는 데 기준을 사용해야합니다.

여기에 사용할 수있는 JPQL : 당신이 양방향 연관이 있다면

select distinct tag from Advert a 
inner join a.tags tag 
where a.category.id = :categoryId 

그것은 아마도 더 자연스럽게 느껴질 것입니다. 그런 다음 사용할 수

select tag from Tag tag where tag.advert.category.id = :categoryId 

또는

select tag from Tag tag 
inner join tag.advert a 
where a.category.id = :categoryId