Erro Many to Many

3 respostas
Mr.style

Galera estou com o seguinte erro ao tentar salvar um registro com este tipo de mapeamento.
Só para ressaltar minha entidade Tipopne é uma could table, ou seja, ja é populada.
Segue o mapeamento nas entidades:

@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(
		name="idoso_tipopne"
		, joinColumns={
			@JoinColumn(name="matricula_idoso")
			}
		, inverseJoinColumns={
			@JoinColumn(name="cod_tipoPNE")
			}
		)
	private List<Tipopne> tipopnes;


@ManyToMany(mappedBy="tipopnes")
	private List<Idoso> idosos;

quando tento dar um persist gera o seguinte erro:

Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.cci.modelo.entidade.Tipopne
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148)

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.cci.modelo.entidade.Tipopne
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)
	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:799)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:791)
e qundo dá um merge dá o seguinte erro:
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)

Caused by: java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails (`cci`.`atividade_idoso`, CONSTRAINT `fk_atividade_has_idoso_idoso1` FOREIGN KEY (`matricula_idoso`) REFERENCES `idoso` (`matricula`) ON DELETE NO ACTION ON UPDATE NO ACTION)
	at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:734)
	at com.sun.gjc.spi.base.StatementWrapper.executeBatch(StatementWrapper.java:569)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 72 more

3 Respostas

A
@ManyToMany(cascade=CascadeType.ALL)  
 @JoinTable(  
     name="idoso_tipopne"  
     , joinColumns=  
         @JoinColumn(name="matricula_idoso")  
         
     , inverseJoinColumns=  
         @JoinColumn(name="cod_tipoPNE")  
           
     )  
 private List<Tipopne> tipopnes;  
   
   
 ManyToMany(mappedBy="tipopnes")  
 private List<Idoso> idosos;

Ve se assim ainda da erro.
retirei as {}.

Mr.style

Eu inverti a forma de mapear
e deu certo
mas não salva na ternaria…
será porque???

lutchobandeira

Alguma outra solução? No meu modelo de objetos não faz sentido eu inverter o mapeamento. Eu realmente não entendo porque em merge está tentando inserir uma nova linha na tabela intermediaria.

Criado 2 de junho de 2011
Ultima resposta 31 de out. de 2012
Respostas 3
Participantes 3