Hibernate is behaving very strangely with a 1:N unidirectional relationship between my classes Orcamento (1) and Trajeto (N). Table Trajeto has a foreign key to Orcamento. When I add a second trajeto to an orcamento, the foreign key of the previous trajetos is set to null, as the last line of the Hibernate SQL log below shows. Is this behavior the expected one?
Hibernate version: 3.1
Mapping documents:
Orcamento:
Code:
<set
name="trajetos"
lazy="false"
inverse="false"
cascade="all"
sort="unsorted"
>
<key
>
<column
name="orcamentoId"
not-null="true"
/>
</key>
<one-to-many
class="br.com.*****.Trajeto"
/>
</set>
Code between sessionFactory.openSession() and session.close():Code:
Session currentSession = HibernateDAOFactory.getCurrentSession();
Transaction tx = currentSession.beginTransaction();
try {
currentSession.saveOrUpdate(entity);
tx.commit();
}
catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
throw e;
}
Name and version of the database you are using:
MySQL 5.0.11
The generated SQL (show_sql=true):
Hibernate: insert into Orcamento (tempoDeViagem, ordemDeCompraGerada, quilometrosPorDia, custoAgregado, agregado, cgccpfCliente, condicoes, data, distancia, excessoDePeso, consumoDeOleo, quilometroPorTUV, observacao, operador, precoDepreciacao, precoDiarias, precoDiversos, precoEscolta, precoLicenca, precoOleo, precoPecas, precoPedagio, precoPneus, precoSeguro, quantidadeDepreciacao, quantidadeDiarias, quantidadeDiversos, quantidadeEscolta, quantidadeLicenca, quantidadeOleo, quantidadePecas, quantidadePedagio, quantidadePneus, quantidadeSeguro, seguro, ufir, comissao, cpmf, custoFinanceiro, icms, impostosFederais, investimento, iss, lucroReal, precoFinalDeVenda, multiplicadorIcms, responsabilidadesCliente, responsabilidadesContratado, numeroDeCaminhoes, custoAdministrativo, lastModificationTimestamp, centralId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into Trajeto (indice, destino, origem) values (?, ?, ?)
Hibernate: insert into Trajeto (indice, destino, origem) values (?, ?, ?)
Hibernate: update Trajeto set orcamentoId=? where id=?
Hibernate: update Trajeto set orcamentoId=? where id=?
Hibernate: update Orcamento set tempoDeViagem=?, ordemDeCompraGerada=?, quilometrosPorDia=?, custoAgregado=?, agregado=?, cgccpfCliente=?, condicoes=?, data=?, distancia=?, excessoDePeso=?, consumoDeOleo=?, quilometroPorTUV=?, observacao=?, operador=?, precoDepreciacao=?, precoDiarias=?, precoDiversos=?, precoEscolta=?, precoLicenca=?, precoOleo=?, precoPecas=?, precoPedagio=?, precoPneus=?, precoSeguro=?, quantidadeDepreciacao=?, quantidadeDiarias=?, quantidadeDiversos=?, quantidadeEscolta=?, quantidadeLicenca=?, quantidadeOleo=?, quantidadePecas=?, quantidadePedagio=?, quantidadePneus=?, quantidadeSeguro=?, seguro=?, ufir=?, comissao=?, cpmf=?, custoFinanceiro=?, icms=?, impostosFederais=?, investimento=?, iss=?, lucroReal=?, precoFinalDeVenda=?, multiplicadorIcms=?, responsabilidadesCliente=?, responsabilidadesContratado=?, numeroDeCaminhoes=?, custoAdministrativo=?, lastModificationTimestamp=?, centralId=? where id=?
Hibernate: update Trajeto set indice=?, destino=?, origem=? where id=?
Hibernate: update Trajeto set indice=?, destino=?, origem=? where id=?
Hibernate: update Trajeto set orcamentoId=null where orcamentoId=? and id=?