Eu tenho 2 classes: Professor e Disciplina onde eu tenho um relacionamento ManyToMany.
Professor:
@NamedQueries({
@NamedQuery(name = "Professor.findAll", query = "SELECT p FROM Professor p"),
@NamedQuery(name = "Professor.findByNome", query = "SELECT p FROM Professor p WHERE lower(p.nome) like concat('%',lower(:nome),'%')"), })
@Entity
@Table(name = "professor")
@PrimaryKeyJoinColumn(name = "id_pessoaFisica", referencedColumnName = "id_pessoa")
public class Professor extends PessoaFisica {
@ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name = "id_professor")
private List<Disciplina> disciplinas = new ArrayList<Disciplina>();
}
Disciplina:
@NamedQueries({
@NamedQuery(name="Disciplina.findAll", query="SELECT d FROM Disciplina d"),
@NamedQuery(name="Disciplina.findByNome", query="SELECT d FROM Disciplina d WHERE lower(d.nome) like concat('%',lower(:nome),'%')"),
@NamedQuery(name="Disciplina.nomeEmUso", query="SELECT d FROM Disciplina d WHERE lower(d.nome) like lower(:nome)"),
@NamedQuery(name="Disciplina.findAllSemProfessor", query="SELECT d FROM Disciplina d, Professor p WHERE p.id != :id")
})
@Entity
@Table(name="disciplina")
public class Disciplina {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(unique=true)
private String nome;
Como vocês podem observar eu estou utilizando @NamedQueries para construir minhas consultas, eu gostaria de retornar todas as disciplinas que não fazem parte de um professor x. Para isso eu tentei:
@NamedQuery(name="Disciplina.findAllSemProfessor", query="SELECT d FROM Disciplina d, Professor p WHERE p.id != :id")
Mas essa consulta está me retornando uma lista vazia, mesmo contendo disciplinas cadastradas no banco. Alguém sabe como faço pra arrumar isso?
