[RESOLVIDO] Could not synchronize database state with session Hibernate!

Bom dia, Estou tentando persistir dados usando relacionamento no hibernate e estou obtendo o seguinte erro: alguem sabe como me resolver?



09:29:20,265 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
	at com.sigga.test.CommonTest.testJoin(CommonTest.java:42)

package com.sigga.test;

import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table
public class Universidade {
	@Id
	@Column(name = "id_universidade")
	private int id;
	
	private String nome;
	@OneToMany(mappedBy = "universidade", fetch = FetchType.EAGER)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.ALL)
	private Collection<Centro> centros;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Collection<Centro> getCentros() {
		return centros;
	}
	public void setCentros(Collection<Centro> centros) {
		this.centros = centros;
	}

}

package com.sigga.test;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table
public class Centro {
	@Id
	@Column(name = "id_centro")
	private int id;	
	
	
	private String nome;
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "id_universidade")
	@Fetch(FetchMode.JOIN)
	private Universidade universidade;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Universidade getUniversidade() {
		return universidade;
	}
	public void setUniversidade(Universidade universidade) {
		this.universidade = universidade;
	}
}

public void testJoin() {
		Object owner = null;
		Session session = null;
		Transaction tx = null;
		Universidade univ = null;
		try {
			owner = HibernateSession.createSession();
			session =  HibernateSession.getSession();
			
			tx = session.getTransaction();
			tx.begin();			
			univ = new Universidade();
			univ.setNome("Universidade Federal do Rio Grande do Norte");
			session.save(univ);
			tx.commit();
			session.flush();
			
			Centro centro1 = new Centro();
			centro1.setNome("Centro de Tecnologia");
			centro1.setUniversidade(univ);
			
			if(!tx.isActive())
				tx.begin();
			
			session.save(centro1);			
			tx.commit();
			session.flush();
			
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		}
		finally {
			try {
				session.flush();
				HibernateSession.closeSession(owner);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}



Deu problema de constraint.

Tenta deixar os 2 “saves” dentro da mesma transação.

Eu acho que isso se resolve se você der apenas um “save”…
Crie a Universidade, crie o Centro, associe o Centro e a Universidade, e salve o Centro… ele vai salvar tudo junto… ou pelo menos deveria…

Muito obrigado por responder,

tentei e não deu erro porem so salvo a universidade.

Query:

insert
into
Universidade
(nome, id_universidade)
values
(?, ?)


package com.sigga.test;

import java.util.HashSet;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.sigga.common.hibernate.HibernateSession;

public class CommonTest {

	public void testJoin() {
		Object owner = null;
		Session session = null;
		Transaction tx = null;
		Universidade univ = null;
		try {
			owner = HibernateSession.createSession();
			session =  HibernateSession.getSession();
			
			//Transacao
			tx = session.getTransaction();
			tx.begin();			
			
			univ = new Universidade();
			univ.setNome("Universidade Federal do Rio Grande do Norte");
			univ.setCentros(new HashSet<Centro>());
			univ.setId(new Integer(0));
			
		
			Centro centro1 = new Centro();
			centro1.setId(new Integer(0));
			centro1.setNome("Centro de Tecnologia");
			centro1.setUniversidade(univ);
			
			univ.getCentros().add(centro1);
			
			//Salvando os dados
			session.save(univ);
			session.save(centro1);	
			
			//Comitando
			tx.commit();
			session.flush();
			
		} catch (HibernateException e) {
			e.printStackTrace();			
			tx.rollback();
		}
		catch (Exception e) {
			e.printStackTrace();			
			tx.rollback();
		}
		finally {
			try {				
				HibernateSession.closeSession(owner);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}

algo mais?

O relacionamento EAGER e LAZY, pode da problema?

Os campos são sequences no ORACLE, por isso passo o 0. Pode atrapalhar?

muito obrigado a vcs dois novamente

Cara, agora que me atentei á um detalhe, seguinte:

[quote=felipe.sodre][code]

public void testJoin() {
Object owner = null;
Session session = null;
Transaction tx = null;
Universidade univ = null;
try {
owner = HibernateSession.createSession();
session = HibernateSession.getSession();

		tx = session.getTransaction();
		tx.begin();			
		univ = new Universidade();
		univ.setNome("Universidade Federal do Rio Grande do Norte");
		session.save(univ);
		//tx.commit();// por enquanto nao precisa
		session.flush();
		
		Centro centro1 = new Centro();
		centro1.setNome("Centro de Tecnologia");
		centro1.setUniversidade(univ);
		
		if(!tx.isActive())
			tx.begin();
		
		session.save(centro1);			
		//tx.commit(); // nao precisa
		session.flush();
		
	} catch (Exception e) {
		e.printStackTrace();
		tx.rollback();
	}
	finally {
		try {
			//session.flush(); //nao precisa dar flush novamente
			tx.commit();//agora vc commita tudo
			HibernateSession.closeSession(owner);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

[/code][/quote]
Tenta dessa maneira…

EAGER e LAZY nesse caso não interfere em nada.

Agora dois detalhes:

1 - você não precisa chamar duas vezes o save(), chama apenas no objeto raiz, no seu caso, universidade
2 - Se você está usando um campo SEQUENCE, você tem que informar isso para o Hibernate. No mapeamento do ID, usa “generator-class=sequence”. Na documentação do Hibernate vai encontrar mais detalhes dele.
Por sim, como você está usando a sequence, não precisa passar valor explicito para os IDs, pode deixá-lo como NULL, alias, pode até remover o método setId dos POJOs.

No flush trava, ixi, desculpem a minha ignorancia, mas o flush sincroniza a sessão?

Pedir a TI para reiniciar o banco, o flush travar era problema de ambiente, porem no segundo flush ocorre o mesmo erro citado no inicio do topico.

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

sequencia de querys:

10:56:23,218 INFO [STDOUT] Hibernate:
insert
into
Universidade
(nome, id_universidade)
values
(?, ?)
10:56:27,203 INFO [STDOUT] Hibernate:
select
id_centro_seq.nextval
from
dual
10:56:33,109 INFO [STDOUT] Hibernate:
insert
into
Centro
(nome, id_universidade, id_centro)
values
(?, ?, ?)

Complementando o erro acima:

ORA-02291: restrição de integridade (MAXIMO.FK_UNIVERSIDADE) violada - chave mãe não localizada

Desculpem a insistencia ja estou quase desistindo de usar hibernate, teria como recuperar o id criado na universidade e setar no campo id_universidade da entidade centro?

Muito Obrigado novamente

Felipe, posta seu código atualizado com as modificações, por favor

Claro obrigado pelo tempo.

entidades:

package com.sigga.test;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table
public class Centro {
	@Id
	@Column(name = "id_centro")
	@SequenceGenerator(name="seq2", sequenceName="id_centro_seq")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq2")	
	private Integer id;	
	
	
	private String nome;
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "id_universidade", insertable=true, updatable=true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Universidade universidade;
	
	public Integer getId() {
		return id;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Universidade getUniversidade() {
		return universidade;
	}
	public void setUniversidade(Universidade universidade) {
		this.universidade = universidade;
	}
}

package com.sigga.test;

import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table
public class Universidade {
	@Id
	@Column(name = "id_universidade")
	@SequenceGenerator(name="seq1", sequenceName="id_universidade_seq")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq1")	
	private Integer id;
	
	private String nome;
	@OneToMany(mappedBy = "universidade", fetch = FetchType.LAZY)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.ALL)
	private Collection<Centro> centros;
	
	public Integer getId() {
		return id;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Collection<Centro> getCentros() {
		return centros;
	}
	public void setCentros(Collection<Centro> centros) {
		this.centros = centros;
	}

}

test


public void testJoin() {   
        Object owner = null;   
        Session session = null;   
        Transaction tx = null;   
        Universidade univ = null;   
        try {   
            owner = HibernateSession.createSession();   
            session =  HibernateSession.getSession();   
               
            tx = session.getTransaction();   
            tx.begin();           
            univ = new Universidade();   
            univ.setNome("Universidade Federal do Rio Grande do Norte");   
            univ.setCentros(new HashSet<Centro>());
                
            Centro centro1 = new Centro();   
            centro1.setNome("Centro de Tecnologia");   
            centro1.setUniversidade(univ);   
            
            univ.getCentros().add(centro1);
            
            session.save(univ);   
            //tx.commit();// por enquanto nao precisa   
            session.flush();   
                
            session.save(centro1);             
            //tx.commit(); // nao precisa   
            session.flush();   
               
        } catch (Exception e) {   
            e.printStackTrace();   
            tx.rollback();   
        }   
        finally {   
            try {   
                //session.flush(); //nao precisa dar flush novamente   
                tx.commit();//agora vc commita tudo   
                HibernateSession.closeSession(owner);   
            } catch (Exception e) {   
                e.printStackTrace();   
            }   
        }   
    }  

Tira o save e o flush do centro1.

Deixe apenas um save(universidade) e um flush depois.

Para usar Hibernate, tem que pensar em objetos gerenciados pelo contexto. Diferente de SQL, onde você tem que fazer um INSERT por vez, no Hibernate você faz o save,update,delete no objeto raiz e o hibernate se preocupa com os relacionamentos (isso se estiverem corretamente mapeados, é claro).

Jair Tenho duas situações e o erro no final é sempre o mesmo.

1º Quando adiciono centros a universidade ocorre o erro no 1º FLUSH

public void testJoin() {     
        Object owner = null;     
        Session session = null;     
        Transaction tx = null;     
        Universidade univ = null;     
        try {     
            owner = HibernateSession.createSession();     
            session =  HibernateSession.getSession();     
                 
            tx = session.getTransaction();     
            tx.begin();             
            univ = new Universidade();     
            univ.setNome("Universidade Federal do Rio Grande do Norte");     
            univ.setCentros(new HashSet<Centro>());   
                   
            Centro centro1 = new Centro();     
            centro1.setNome("Centro de Tecnologia");     
            centro1.setUniversidade(univ);     
               
            univ.getCentros().add(centro1);   
               
            session.save(univ);     
            //tx.commit();// por enquanto nao precisa     
            
//ERRO OCORRE NESSE FLUSH
            session.flush();     
                   
            session.save(centro1);               
            //tx.commit(); // nao precisa         
                 
        } catch (Exception e) {     
            e.printStackTrace();     
            tx.rollback();     
        }     
        finally {     
            try {     
                //session.flush(); //nao precisa dar flush novamente     
                tx.commit();//agora vc commita tudo     
                HibernateSession.closeSession(owner);     
            } catch (Exception e) {     
                e.printStackTrace();     
            }     
        }     
    } 

2º Quando não adiciono o centro a universidade ele executa todo o codigo e da o erro no commit;


public void testJoin() {     
        Object owner = null;     
        Session session = null;     
        Transaction tx = null;     
        Universidade univ = null;     
        try {     
            owner = HibernateSession.createSession();     
            session =  HibernateSession.getSession();     
                 
            tx = session.getTransaction();     
            tx.begin();             
            univ = new Universidade();     
            univ.setNome("Universidade Federal do Rio Grande do Norte");     
           
                   
            Centro centro1 = new Centro();     
            centro1.setNome("Centro de Tecnologia");     
            centro1.setUniversidade(univ);     
               
            session.save(univ);     
            //tx.commit();// por enquanto nao precisa     
            session.flush();     
                   
            session.save(centro1);               
            //tx.commit(); // nao precisa     
  
                 
        } catch (Exception e) {     
            e.printStackTrace();     
            tx.rollback();     
        }     
        finally {     
            try {     
                //session.flush(); //nao precisa dar flush novamente     
                tx.commit();//agora vc commita tudo     
                HibernateSession.closeSession(owner);     
            } catch (Exception e) {     
                e.printStackTrace();     
            }     
        }     
    } 

Sobre o mapeamento do relacionamento das tabelas não sei se posso fazer mais algo mas segue o script das tabelas.

CREATE TABLE Universidade
(
id_universidade integer NOT NULL, – Identificador da tabela
nome character(100) NOT NULL, – Nome da universidade
CONSTRAINT pk_universidade PRIMARY KEY (id_universidade)
)

CREATE TABLE Centro
(
id_centro integer NOT NULL, – Identificador da tabela
nome character(100) NOT NULL, – Nome do centro
id_universidade integer NOT NULL)

ALTER TABLE Centro ADD CONSTRAINT FK_UNIVERSIDADE
FOREIGN KEY (id_universidade) REFERENCES Universidade (id_universidade)

COMMIT;

SELECT * FROM UNIVERSIDADE

SELECT * FROM CENTRO

CREATE SEQUENCE id_centro_seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER;

CREATE OR REPLACE TRIGGER set_id_centro
BEFORE INSERT
ON CENTRO
FOR EACH ROW
BEGIN
SELECT id_centro_seq.NEXTVAL
INTO :NEW.id_centro
FROM DUAL;
END;
/

CREATE SEQUENCE id_universidade_seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER;

CREATE OR REPLACE TRIGGER set_id_universidade
BEFORE INSERT
ON UNIVERSIDADE
FOR EACH ROW
BEGIN
SELECT id_universidade_seq.NEXTVAL
INTO :NEW.id_universidade
FROM DUAL;
END;
/

Agora pelo que li em foruns ao salvar o registro session.save(univ) o id do univ deveria ser atualizado com o do banco correto?

debugando aqui percebi que ele cria um id do hibernate um numero qualquer tipo 3600 e atribui ao id do atributo id do objeto univ

Jair fiz desse jeito tosco mas ainda não acredito que tenha que não funcione o relacionamento da forma que estava fazendo, deve ser alguma besteira que vai me matar de raiva quando descobrir…

Vc pensou em algo mais?

Obrigado


	public void testJoin() {     
        Object owner = null;     
        Session session = null;     
        Transaction tx = null;     
        Universidade univ = null;     
        try {     
            owner = HibernateSession.createSession();     
            session =  HibernateSession.getSession();     
                 
            tx = session.getTransaction();     
            tx.begin();             
            univ = new Universidade();     
            univ.setNome("Universidade Federal do Rio Grande do Norte");     
            
            session.flush();
            session.save(univ);
           
            tx.commit();
            
            HibernateSession.closeSession(owner);   
            
           owner = HibernateSession.createSession();    
           session =  HibernateSession.getSession();     
           tx = session.getTransaction();     
            
            tx.begin();
            List listSeq = session.createSQLQuery("select id_universidade_seq.nextval from dual").list();
            Integer i = new Integer((String) listSeq.get(0).toString()) -1;
            
            univ.setId(i);       
            Centro centro1 = new Centro();     
            centro1.setNome("Centro de Tecnologia");     
            centro1.setUniversidade(univ);     
            
            session.save(centro1);     
            session.flush();
            tx.commit();

        } catch (Exception e) {     
            e.printStackTrace();     
           tx.rollback();     
        }     
        finally {     
            try {     
                //session.flush(); //nao precisa dar flush novamente     
                tx.commit();//agora vc commita tudo     
                HibernateSession.closeSession(owner);     
            } catch (Exception e) {     
                e.printStackTrace();     
            }     
        }    
} 

Felipe,

Em ambos os exemplos tem dois save. O correto é ter o save apenas no objeto raiz, no caso, universidade.

Tenta isso

public void testJoin() {     
        Object owner = null;     
        Session session = null;     
        Transaction tx = null;     
        Universidade univ = null;     
        try {     
            owner = HibernateSession.createSession();     
            session =  HibernateSession.getSession();     
                 
            tx = session.getTransaction();     
            tx.begin();             
            univ = new Universidade();     
            univ.setNome("Universidade Federal do Rio Grande do Norte");     
            univ.setCentros(new HashSet&lt;Centro&gt;());   
                   
            Centro centro1 = new Centro();     
            centro1.setNome("Centro de Tecnologia");     
            centro1.setUniversidade(univ);     
               
            univ.getCentros().add(centro1);   
               
            session.save(univ);     
            //tx.commit();// por enquanto nao precisa     
            
//ERRO OCORRE NESSE FLUSH
            session.flush();     
        } catch (Exception e) {     
            e.printStackTrace();     
            tx.rollback();     
        }     
        finally {     
            try {     
                //session.flush(); //nao precisa dar flush novamente     
                tx.commit();//agora vc commita tudo     
                HibernateSession.closeSession(owner);     
            } catch (Exception e) {     
                e.printStackTrace();     
            }     
        }     
    } 

Jair obrigado pela paciencia,

Testei exatamente seu código e obtive o mesmo erro:


14:45:52,000 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
	at com.sigga.test.CommonTest.testJoin(CommonTest.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:317)
	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:292)
	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:249)
	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:462)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.sigga.common.util.SecurityFilter.doFilter(SecurityFilter.java:37)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.BatchUpdateException: ORA-02291: restrição de integridade (MAXIMO.FK_UNIVERSIDADE) violada - chave mãe não localizada

	at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10768)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)

To usando o Jboss Seam será que pode ser problema do Jboss?

Ah o erro ocorre no FLUSH novamente!

:shock:

:thumbup:

Ah, que saudade desses problemas de persistência do Seam… sinceramente, eu não sei te responder, na teoria o que o Jair falou “deveria” funcionar, mas o JBoss Seam tem vida própria, sabe… alguém sa habilita?