HQL JoinTable недоступен - PullRequest
       8

HQL JoinTable недоступен

3 голосов
/ 09 февраля 2011

У меня много взаимосвязей между медиа и тегами:

Medium:

@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]

Что я в основном хочу сделать, это запросить все медиа, которые имеют тег с определенным идентификатором. К сожалению, я не могу получить доступ к столу.

Есть предложения? :)

1 Ответ

7 голосов
/ 09 февраля 2011

HQL-запросы написаны в терминах сущностей, а не таблиц, поэтому вы не можете запросить таблицу произвольной таблицы.

Итак, вам нужно сформулировать запрос в терминах логических отношений между объектами, а не путем прямого доступа к таблице соединения, что-то вроде этого:

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

См. Также:

...