2011-02-09 47 views
3

我有很多媒體和標籤之間的多對多關係:HQL JoinTable無法訪問

介質:

@ManyToMany(fetch=FetchType.EAGER) 
@IndexColumn(name="tags_index_column") 
@JoinTable(name="tag_map", 
      joinColumns={@JoinColumn(name="tag_id")}, 
      inverseJoinColumns={@JoinColumn(name="item_id")}) 
private List<Tag> tags; 

標籤:

@ManyToMany(mappedBy="tags") 
@JoinTable(name="tag_map", 
     joinColumns={@JoinColumn(name="item_id")}, 
       inverseJoinColumns={@JoinColumn(name="tag_id")}) 
private List<Medium> media; 

我嘗試查詢從HQL連接表但我總是得到一個例外:

String resultQueryString = "From tag_map" 

     Query resultQuery SessionFactory.getCurrentSession().createQuery(resultQueryString); 

例外:

org.springframework.orm.hibernate3.HibernateQueryException: tag_map is not mapped [From tag_map]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: tag_map is not mapped [From tag_map] 

我基本上想要做的是查詢所有具有特定ID標記的媒體。不幸的是我無法訪問連接表。

有什麼建議嗎? :)

回答

7

HQL查詢是根據實體編寫的,而不是表格,因此您無法查詢任意的表格表格。

所以,你需要的entites之間的邏輯關係方面,而不是通過直接訪問連接表,像這樣制定的查詢:

select m from Medium m join m.tags t where t.id = ? 

參見:

+0

感謝您的快速回復:) – kiwaque 2011-02-09 11:34:15