Olá amigos,
Reservei esse sabadão para tentar resolver essa pendência.
Debugando o código mais a fundo percebi que era lançada um exception internamente quando o método commit tentava dar um flush.
Bem aqui:
public void managedFlush() {
if ( isClosed() ) {
log.trace( "skipping auto-flush due to session closed" );
return;
}
log.trace("automatically flushing session");
flush();
if ( childSessionsByEntityMode != null ) {
Iterator iter = childSessionsByEntityMode.values().iterator();
while ( iter.hasNext() ) {
( (Session) iter.next() ).flush();
}
}
}
Seguindo a dica do Urubatan em http://www.urubatan.com.br/dica-rapida-desabilitando-a-persistencia-automatica-no-hibernate/, desabilitei a persistência automática.
Eis que a exception parou de ser lançada, no entanto meu objeto não é mais persistido.
Curiosamente, tenho um objeto pai e 4 objetos filhos. Um objeto filho ainda é persistido, os outros não.
Vejam meu código:
public void adicionaAssessor(){
Endereco endereco=new Endereco();
endereco.setAtivo(true);
endereco.setBairro("Jardim Represa");
endereco.setCep("09842-080");
endereco.setMunicipio("São Bernardo do Campo");
endereco.setNumero("409");
endereco.setRua("Estrada Galvão Bueno");
endereco.setUf("SP");
Cargo cargo=new Cargo();
cargo.setCargo("Gerente2");
ZonaEleitoral zona=new ZonaEleitoral();
zona.setCodigoProcessual("44");
zona.setEndereco(endereco);
zona.setNumeroZona(433);
DadosEleitorais dadosEleitorais=new DadosEleitorais();
dadosEleitorais.setAtivo(true);
dadosEleitorais.setFiliacaoPartidaria(new PartidoDAO().busca(28));
dadosEleitorais.setTituloEleitor("44444");
dadosEleitorais.setZonaEleitoral(zona);
Assessor assessor=new Assessor();
assessor.setNome("Orlando da Silva");
assessor.setDataNascimento("15/12/1995");
assessor.setEstadoCivil("solteiro");
assessor.setRg("48.121.692-3");
assessor.setOrgaoEmissor("SSP");
assessor.setCpf("[CPF removido]");
assessor.setDadosEleitorais(dadosEleitorais);
assessor.setTelefoneResidencial("4342-5395");
assessor.setTelefoneCelular("7169-3668");
assessor.setCargo(cargo);
assessor.setData_admissao(Calendar.getInstance());
assessor.setEndereco(endereco);
assessor.setAtivo(true);
AssessorService s=new AssessorService();
s.adiciona(assessor);
}
Dentro dos objetos filhos, apenas o cargo é persistido. :roll:
Como pode???
Vejam meus relacionamentos:
@Entity
@Table(name = "assessores")
public class Assessor implements Serializable {
private static final long serialVersionUID = 8156212227013079327L;
@Column(name = "id_assessor")
@Id
@GeneratedValue
private Integer id;
private String nome;
@Column(name = "data_nascimento")
private String dataNascimento;
@Column(name="estado_civil")
private String estadoCivil;
private String rg;
@Column(name="orgao_emissor")
private String orgaoEmissor;
private String cpf;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "id_dados_eleitorais")
private DadosEleitorais dadosEleitorais;
@Column(name = "telefone_residencial")
private String telefoneResidencial;
@Column(name = "telefone_celular")
private String telefoneCelular;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "id_endereco")
private Endereco endereco;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "id_cargo")
private Cargo cargo;
private Calendar data_admissao;
private Boolean ativo;
private byte[] foto;
Confesso que não estou entendendo o que está acontecendo. :?: :?:
Fico grato pela ajuda!