我在媒体和标签之间有多对多的关系:
中:
@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标签的媒体。不幸的是我无法访问连接表。
有什么建议吗? :)
答案 0 :(得分:7)
HQL查询是根据实体而不是表格编写的,因此您无法查询任意表格表。
因此,您需要根据entites之间的逻辑关系来制定查询,而不是直接访问连接表,如下所示:
select m from Medium m join m.tags t where t.id = ?
另见: