[RESOLVIDO] HIBERNATE - erro quando salvar dados multiplos em tabela associativa

2 respostas
jaymemattos

Bom dia galera.

Estou com uma tremendo problema, criei uma tabela associativa que terá dois campos, o primeiro vai ser o ID da tabela "registrarPlanejamento" e o outro da tabela "Pessoa", mais quando eu cadastro o primeiro fica tudo certo, o problema acontece quando irei salvar o segundo registro, aparece o seguinte erro:

java.sql.BatchUpdateException: Entrada em lote 0 insert into public.pessoa_registrarPlanejamento (idRegistrarPlanejamento, idPessoa) values (2, 1) foi abortada. Chame getNextException para ver a causa.

Eu acho que não está aceitando dois ID's iguais da tabela Pessoa mesmo sendo em registros diferentes, aqui embaixo ta o codigo das duas tabelas:

Da classe RegistrarPlanejamento:

@Entity
@Component
public class RegistrarPlanejamento {

	@Id
	@SequenceGenerator(name = "sequence_registrarplanejamento", sequenceName = "sequence_registrarplanejamento", initialValue = 1, allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence_registrarplanejamento")
	private Long id;
	
       @ManyToMany(fetch=FetchType.LAZY)
       @JoinTable(name="pessoa_registrarPlanejamento", joinColumns=@JoinColumn(name="idRegistrarPlanejamento"),
                                       inverseJoinColumns=@JoinColumn(name="idPessoa"))
	private Collection<Pessoa> pessoa;
}

Da Classe Pessoa:

@Entity
@Component
public class Pessoa {

	@Id
	@SequenceGenerator(name = "sequence_pessoa", sequenceName = "sequence_pessoa", initialValue = 1, allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence_pessoa")
	private Long id;

	@ManyToMany(fetch=FetchType.LAZY)
        @JoinTable(name="pessoa_registrarPlanejamento", joinColumns=@JoinColumn(name="idPessoa"),
                                       inverseJoinColumns=@JoinColumn(name="idRegistrarPlanejamento"))
	private Collection<Pessoa> pessoa;

}

Alguém pode me ajudar??

Abraços.

2 Respostas

A

cara,
tenta fazer assim

@Entity  
@Component  
public class RegistrarPlanejamento {  
  
    @Id  
    @SequenceGenerator(name = "sequence_registrarplanejamento", sequenceName = "sequence_registrarplanejamento", initialValue = 1, allocationSize = 1)  
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence_registrarplanejamento")  
    private Long id;  
      
       @ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY)  
       @JoinTable(name="pessoa_registrarPlanejamento", joinColumns=@JoinColumn(name="idRegistrarPlanejamento"),  
                                       inverseJoinColumns=@JoinColumn(name="idPessoa"))  
    private Collection<Pessoa> pessoa;  
}
@Entity  
@Component  
public class Pessoa {  
  
    @Id  
    @SequenceGenerator(name = "sequence_pessoa", sequenceName = "sequence_pessoa", initialValue = 1, allocationSize = 1)  
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence_pessoa")  
    private Long id;  
  
    @ManyToMany(mappedBy="table1s", cascade = CascadeType.ALL, fetch=FetchType.LAZY)  
    private Collection<Pessoa> pessoa;  
  
}

se der algum erro, postei ele completo

t+

jaymemattos

Cara, funcionou

O erro que estava dando é que eu tava mapeando a tabela Pessoa nas duas Classes (Pessoa e RegistrarPlanejamento):

Na classe pessoa mudei para:

E ficou tudo Ok

Valeu

Abraços

Criado 26 de outubro de 2011
Ultima resposta 26 de out. de 2011
Respostas 2
Participantes 2