Problema com ordem na inserção de dados com Hibernate!

Galera estou com um problema na hora de inserir dados no hibernate eu tenho duas classes funcionario e escolaridade. Onde existe uma relação de funcionario para escolaridade.

Em funcionario eu tenho um Set de escolaridades.
Deveria inserir os dados assim:

[B]
Set e = new HashSet();
Escolaridade escolaridade = new Escolaridade();
e.add(escolaridade);

Funcionario func = new Funcionario();
func.setEscolaridade(e);
save(func);
save(escolaridade);
[/B]

Sendo que quando eu faço isso a inserção não acontece porque a chave de funcionario não vai para escolaridade.

Mas se eu fizer assim:

[B]
Funcionario func = new Funcionario();
Escolaridade escolaridade = new Escolaridade();

escolaridade.setFuncionario(func);

save(func);
save(escolaridade);
[/B]

Desta forma ele insere normalmente mas o meu Set de escolaridade fica inutilizado.

Ai vai meu código. Se alguém souber o problema eu agradeço muito.

funcionario.hbm


 <class name="funcionario.Funcionario" table="funcionario" >
         <id name="id" type="integer">
             <column name="id" />
             <generator class="native" />
         </id>
         <property name="nome" type="string">
             <column name="nome" />
         </property>
         <property name="matricula" type="string">
             <column name="matricula" length="45" />
         </property>
         <property name="funcao" type="string">
             <column name="funcao" length="45" />
         </property>
         <property name="horario" type="string">
             <column name="horario" length="20" />
         </property>
         <property name="situacao" type="string">
             <column name="situacao" length="45" />
         </property>
         <property name="cargo" type="string">
             <column name="cargo" length="45" />
         </property>
         
         <set name = "escolaridade" inverse="true">
         	<key column="id"></key>
         	<one-to-many class = "escolaridade.Escolaridade"/>
         </set>
         
      <!-- <many-to-one name="setor" column="Setor_id" not-null="true" />-->
       
       <one-to-one  name = "outros" property-ref="funcionario"/>
         
     </class>
 

escolaridade.hbm


 <class name="escolaridade.Escolaridade" table="escolaridade" >
         <id name="id" type="integer">
             <column name="id" />
             <generator class="increment" />
         </id>
         <property name="escolaridade" type="string">
             <column name="escolaridade" />
         </property>
        
         <many-to-one  name="funcionario" column="Funcionario_id" />
     </class>
 

funcionario.java


         private Integer id;
 	private String nome;
 	private String matricula;
 	private String funcao;
 	private String horario;
 	private String situacao;
 	private String cargo;
 	private Set escolaridade =  new HashSet();
 	private Outros outros;
 	private Setor setor;
 

escolaridade.java


         private Integer id;
 	private String escolaridade;
 	private Funcionario funcionario;
 

ola jmedeiros,

Eu tive este mesmo “problema” quando esta comecando com o hibernate e resolvi implementando um metodo, no seu caso na classe funcionario, vc poderia chamar de addEscolaridade. bom a responsabilidade desse metodo seria adicionar a escolaridade ao funcionario e setar o funcionario a escolaridade, exemplo

na classe funcionario.java

    public void addEscolaridade(Escolaridade escol){
        escol.setFuncionario(this); // escol eh o parametro passado pro metodo
        this.escolaridade.add(escol); //this.escolaridade eh o seu Set
        
    }

na classe escolaridade.java

    public void setFuncionario(Funcionario func) {
        if (this.funcionario != func) {
            this.funcionario = func;
            if (func != null) func.addEscolaridade(this);
        }     

    }

Bom foi assim q eu resolvi, c alguem tiver alguma outra ideia nos avise.

obs: essa implementacao eu peguei do codigo gerado pelo Rational Rose

Valeu Renato… isso realmente vai me ajudar.

Mas fiquei intrigado porque a outra forma não funciona.

Valeu a ajuda!

olha jmedeiros acho eu que deve ser porque na sua primeira implementacao

Set e = new HashSet();
Escolaridade escolaridade = new Escolaridade();
e.add(escolaridade);

Funcionario func = new Funcionario();
func.setEscolaridade(e);
save(func);
save(escolaridade);

vc nao esta relacionando escolaridade a funcionario se voce fizer System.out.print(escolaridade.getFuncionario().getNome()); vc vai perceber. provavelmente ira dar um erro de null exception, porque vc nao setou o objeto funcionario da classe escolaridade.

acho q eh isso me corrija se estiver errado.