Estou com uma duvida em como fazer update em cascata com hibernate, quando se tem um relacionamento one to one…
Tenho a seguinte classe…
public class AdversoVO {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column (name="cd_adverso")
private Integer cd_adverso;
@Column(name="observacoes", nullable=false, length=280)
private String observacoes;
@OneToOne(cascade = CascadeType.ALL)
private PessoaVO pessoa;
e tenho a classe PessoaVO, que não tem nenhum campo que referencia a classe AdversoVO…pois está unidirecional…
@Entity
@Table(name="pessoa")
public class PessoaVO {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column (name="cd_pessoa")
private Integer cd_pessoa;
@Column(name="nome", nullable=false, length=50)
private String nome;
@Column(name="fone_resid", nullable=false, length=50)
private String fone_resid;
@Column(name="fone_comercial", nullable=false, length=50)
private String fone_comercial;
Quando vou fazer o update, eu pego os valores dos campos, inclusive o cód do Adverso…
Mas quando dou o update, ele dá update em AdversoVO, mas insere outro cadastro para pessoaVO
public void alterar() throws AlterarException, IllegalArgumentException, ParseException, InserirException{
montarModel();//<--Aqui pego os dados do campo
adversoVO.setPessoa(pessoaVO);
pessoaVO.setEndereco(enderecoVO);
dao.alterar(adversoVO);
}
Eu ateh sei qual é o problema, pois qdo faço um pessoaVO.setCod(1)…ele faz o update, mas como vou pegar o valor verdadeiro do código?
Obrigado ae galera!!
Tentou dar update no pesssoa?
Nao…pois pra mim dar o update no pessoa, eu teria q ter o codigo…mas nao sei como buscar esse codigo…
[quote=Danilo Alves Tucci]Nao…pois pra mim dar o update no pessoa, eu teria q ter o codigo…mas nao sei como buscar esse codigo…[/quote]Ou faça o relacionamento bidirecional ou busque o código de algum lugar.
Entenda que o cascade só funciona na Entity que tiver o relacionamento com o Cascade.
Mas o meu insert esta funcionando normal…achei q existisse algum tipo de cascade, ou join que eu pudesse usar como annotation…
[quote=Danilo Alves Tucci]Mas o meu insert esta funcionando normal…achei q existisse algum tipo de cascade, ou join que eu pudesse usar como annotation…[/quote]Como está o seu insert?
Eu passo meu objeto para esse método…o do inserir…
public Integer inserir(Object obj) throws InserirException{
Integer codigoGerado = null;
// Declarando uma variável que armazenará uma Transação.
Transaction transacao = null;
// Declarando uma variavél que armazenará uma Sessão do hibernate contendo
// uma conexão aberta e válida.
Session sessao = null;
try{
// Pega uma Sessão aberta com o Hibernate
sessao = getSessaoAberta();
// Iniciando um bloco de transação
transacao = sessao.beginTransaction();
/*
* Ação desejada a ser executada no banco de dados.
* SAVE - Após inserir, o método 'save' retorna o id no qual
* o objeto foi inserido.
*/
codigoGerado = (Integer)sessao.save(obj);
// Confirma a ação executada e fecha a Transação.
transacao.commit();
}catch(Exception e){
// Caso ocorra algum erro no processo, se a transação tiver sido criada,
// será efetuado um Rollback na mesma.
if(transacao != null){
transacao.rollback();
}
throw new InserirException("Erro ao tentar inserir o OBJETO ["+obj+"]", e);
}finally{
// Fecha a Sessão com o BD.
if(sessao != null){
sessao.close();
}
}
return codigoGerado;
}
E quem você insere? o Pessoa? Ou o Adverso?
E quando você cria, ele já está com relacionamento?