Erro ao persistir Com Hibernate

4 respostas
javahibernate
Carlos_Barauna

Boa tarde.
Tenho 2 classe que referenciam duas tabelas. Eu salvo a classe EstruturaAlcada, que tem Uma lista de AlcadaEstruturaAlcadas de Alcada com uma Alcada. Até ai tudo bem se todos os dados forem novos ou sejam ainda não estiverem no banco. Mas se já estiver uma Alcada cadastrada ao invés de Salvar uma nova Alcada, eu vou apenas salvar a Estrutura e a AlcadaEstruturaAlcadas e referenciar a Alcada existente e ai recebo o erro abaixo.

detached entity passed to persist: br.com.model.entity.Alcada

Classe EstruturaAlcada

> Entity

> @Table(name = TESAL_ESTRUTURA_ALCADA)

> @SequenceGenerator(name = SQ_ESAL, sequenceName = SQ_ESAL, allocationSize = 1)

> public class EstruturaAlcada extends BaseEntity {
>     @Id
>     @Column(name = "ESAL_SEQ_CHAVE", nullable = false, unique = true)
>     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQ_ESAL")
>     private Long codigo;

>     @Column(name = "ESAL_ENU_ATIVO", nullable = false)
>     private Character ativo;

>     @Column(name = "ESAL_DATA_CADASTRO", nullable = false)
>     private Date dataCadastro;

>     @ManyToOne(fetch = FetchType.EAGER)
>     @JoinColumn(name = "USUA_SEQ_CHAVE", nullable = false)
>     private Usuario usuario;

>     @OneToMany(mappedBy = "estruturaAlcada", cascade = CascadeType.ALL, fetch =FetchType.LAZY)
>     private List<AlcadaEstruturaAlcada> alcadaEstruturaAlcadas;

Classe AlcadaEstruturaAlcada

> @Entity
> @Table(name = "TALEA_ALCADA_ESTRUTURA_ALCADA")
> @SequenceGenerator(name = "SQ_ALEA", sequenceName = "SQ_ALEA", allocationSize = 1)
> public class AlcadaEstruturaAlcada extends BaseEntity {

>     @Id
>     @Column(name = "ALEA_SEQ_CHAVE", nullable = false, unique = true)
>     @GeneratedValue (strategy = GenerationType.SEQUENCE, generator ="SQ_ALEA")
>     private Long codigo;

>     @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
>     @JoinColumn(name = "ESAL_SEQ_CHAVE", nullable = false)
>     private EstruturaAlcada estruturaAlcada;

>     @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH},  fetch = FetchType.EAGER)
>     @JoinColumn(name = "ALCA_SEQ_CHAVE", nullable = false)
>     private Alcada alcada;

>     @Column(name = "ALEA_NIVEL", nullable = false)
>     private Integer nivel;

4 Respostas

Lucas_Camara

Se o objeto alcada não tiver sofrido alteração, você pode chamar um merge para recolocar o mesmo na sessão do hibernate (ATENÇÃO: o merge faz alteração no banco caso algum atributo tenha sido alterado).

Carlos_Barauna

Lucas o caso é que não tenho acesso as classes de persistência pra chamar o merge. Tenho apenas a opção de Salvar, Alterar, Excluir e Buscar.

Lucas_Camara

Você pode tentar buscar novamente o objeto pelo ID e atribuir na mesma variável.

Carlos_Barauna

Já tentei isso. No momento de salvar eu busco ele pelo ID. Mesmo assim ainda da esse erro.

Criado 13 de julho de 2016
Ultima resposta 13 de jul. de 2016
Respostas 4
Participantes 2