acho melhor vc trabalhar com Professor do que com Integer ou Long…
Vc precisa configurar esses JoinColumns? O seu banco é legado? se não for (ou se vc puder mudar e/ou criar ele do zero) use as classes da seguinte maneira:
@Entity
public class Disciplina {
@Id
@GeneratedValue
private Long id;
//...
@ManyToOne
private Professor professor;
//getters e setters
}
@Entity
public class Professor {
@Id
@GeneratedValue
private Long id;
// não precisa fazer a outra parte do relacionamento
}
ao salvar uma disciplina, se vc passar um Professor com o id setado, e esse id existir na tabela Professor, ele vai fazer o relacionamento sem problema…
Se as tabelas já existirem, e vc não puder mexer, posta o schema delas (describe table, ou algo do gênero) pra eu saber como seria o mapeamento certo…
vc pode usar o Hibernate Tools (um plugin do eclipse) pra fazer a engenharia reversa do banco: ele vai gerar as entidades do Hibernate pra vc, baseado no banco, e vai tudo funcionar…