2011-11-18 36 views
0

請幫忙建立一個查詢! 我必須通過共同父對象選擇所有標籤類別標識。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