Consultar uma tabela não mapeada no hibernate [Resolvido]

Boa tarde,
Tenho duas classes: Professor e Disciplina.
Estas classes são transformadas em tabelas correspondentes pelo hibernate.
Sendo o relacionamento das tabelas correspondentes no hibernate NXM, é criada a tabela não mapeada professor_disciplina a partir da classe Professor:


	@ManyToMany
	@JoinTable(name = "PROFESSOR_DISCIPLINA", joinColumns = { @JoinColumn(name = "PROFESSOR_ID", referencedColumnName = "ID") }, inverseJoinColumns = { @JoinColumn(name = "DISCIPLINA_ID", referencedColumnName = "ID") })
	private Set<Disciplina> disciplinas = new HashSet<Disciplina>();

Preciso então saber como faço para consultar esta tabela (professor_disciplina) num select via hibernate (named query, de preferência).

Grato pela atenção.

Cara, faz tempo que nao trampo com Hibernate a nivel de Mapeamento, mas… Porque nao mapear a Tabela Professor_Disciplina ?? 8)

Primeiro, porque não acho interessante transformá-la numa classe.
Segundo, porque estruturalmente, eu precisaria fazer o respectivo repositório, dao, etc. (Ou seja, preguiça). :wink:
Mas estruturalmente não seria bom, mesmo.

Cara, da uma olhada nesse exemplo.

http://www.xylax.net/hibernate/manytomany.html

Bacana, mas esse mapeamento é xml, e como pode ver, estou usando anotações.

Eu não costumo usar anotações, testei pelo gerador do netbeans o exemplo que te passei acima.

Ficou assim:

Tabela Foo

...
    @JoinTable(name = "foo_bar", joinColumns = {@JoinColumn(name = "foo_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name =     "bar_id", referencedColumnName = "id")})
    @ManyToMany
    private Collection<Bar> barCollection;
...

Tabela Bar

    @ManyToMany(mappedBy = "barCollection")
    private Collection<Foo> fooCollection;

Não entendi muito bem pq na tabela Bar não foi gerado o relacionamento como na tabela Foo. Mas vc pode testar esse mapeamento ou então utilizar alguma IDE para gerar pra vc.

Muito obrigado pela sua resposta, romarcio, mas este caso é para uma associação bidirecional entre classes, note que a anotação da classe (ou tablela) Foo é exatamente o que postei que consta na classe Professor.
A diferença é que esta é uma associação unidirecional, ou seja, apenas a classe Professor pode conhecer a classe Disciplina, mas não o contrário.
Segundo o que você me passou, a tabela está sim sendo mapeada no hibernate, logo, eu estou consultando errado.
Minha consulta é a segunite:

@NamedQuery(name = "GradeDisponibilidade.obterProfessoresDisponibilizados",
query = "SELECT DISTINCT p FROM Professor p, PROFESSOR_DISCIPLINA pd " +
"WHERE pd.professor.id = p.id AND pd.disciplina.id = :disciplinaParam")

Sei que o hibernate só encontra classes pelo hql e a classe PROFESSOR_DISCIPLINA não existe no projeto.
Mas, então como devo consultar?

Mais uma vez, agradeço a atenção.

EDIT: Consegui!!! Era isso mesmo, a consulta estava errada. A correta seria o seguinte:

@NamedQuery(name = "GradeDisponibilidade.obterProfessoresDisponibilizados",
		query = "SELECT DISTINCT p FROM Professor p " +
				" WHERE p.disciplinas.id = :disciplinaParam")

Muitíssimo obrigado ao romarcio.

Mapemento essa entidade é Instituicao

[code]

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="Instituicao_professor",joinColumns={@JoinColumn(name="identificador") }
,inverseJoinColumns={@JoinColumn(name = "cpfMatricula")})
@Cascade(CascadeType.ALL)
private Collection<Professor> professores;[/code]

Mapeamento entidade professor.

@ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "Instituicao_professor", joinColumns = { @JoinColumn(name = "cpfMatricula") }, inverseJoinColumns = { @JoinColumn(name = "identificador") }) private Collection<Instituicao> instituicoes;