Problema ao inserir (chave-composta)

1 resposta
R

Galera, estou tentando inserir um registro na tabela Avaliacoes, porém me retorna o erro abaixo:

[6/22/11 1:25:43:988 BDST] 00000047 JDBCException W org.hibernate.util.JDBCExceptionReporter logExceptions SQL Error: 1452, SQLState: 23000
[6/22/11 1:25:44:019 BDST] 00000047 JDBCException E org.hibernate.util.JDBCExceptionReporter logExceptions Cannot add or update a child row: a foreign key constraint fails (`appfbpor/avaliacoes`, CONSTRAINT `avaliacoes_ibfk_1` FOREIGN KEY (`MAT_PRO`) REFERENCES `profissionais` (`MAT_PRO`))
[6/22/11 1:25:44:051 BDST] 00000047 AbstractFlush E org.hibernate.event.def.AbstractFlushingEventListener performExecutions 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:249)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
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.brq.feedback.data.avaliacao.AvaliacaoDao.save(AvaliacaoDao.java:17)
at com.brq.feedback.business.avaliacao.AvaliacaoBO.save(AvaliacaoBO.java:12)
at com.brq.feedback.business.avaliacao.ManterAvaliacaoFacade.save(ManterAvaliacaoFacade.java:17)
at com.brq.feedback.control.cargaExcel.CargaExcelView.save(CargaExcelView.java:226)
at com.brq.feedback.control.cargaExcel.CargaExcelView.salvaServidor(CargaExcelView.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)

Entidades:

AvaliacaoTO
@Entity
@Table(name="avaliacoes")
@NamedQueries(
		{ 
			@NamedQuery(name="avaliacoes.obterPorStatus", query="from AvaliacaoTO where status = :param")
		}
		)
public class AvaliacaoTO implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@EmbeddedId
	private AvaliacaoCK codigo;
AvaliacaoCK
@Embeddable
public class AvaliacaoCK implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@Column(name="COD_AVA")
	private int codigo;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="MAT_PRO") //Foreign Key
	private ProfissionalTO profissional;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="COD_IND") //Foreign Key
	private IndicadorTO indicador;
ProfissionalTO
@Entity
@Table(name="profissionais")
@NamedQueries(
		{ 
			@NamedQuery(name="profissionais.obterPorId", query="from ProfissionalTO where codigo = :param")
		}
		)
public class ProfissionalTO implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@Id
	//@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="MAT_PRO")
	private Integer codigo;
	
	@OneToMany(mappedBy="codigo.profissional")
	private List<AvaliacaoTO> avaliacao;
IndicadorTO
@Entity
@Table(name="indicadores")
public class IndicadorTO implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="COD_IND")
	private int codigo;
	
	@OneToMany(mappedBy="codigo.indicador")
	private List<AvaliacaoTO>  avaliacao;
Código de teste:
aval = new AvaliacaoTO();
prof = new ProfissionalTO();
indi = new IndicadorTO();
AvaliacaoCK ack = new AvaliacaoCK();
ack.setCodigo(1);
indi.setCodigo(1);
prof.setCodigo(1);
ack.setProfissional(prof);
ack.setInidicador(indi);
aval.setCodigo(ack);
new ManterAvaliacaoFacade().save(aval);

Alguém tem idéia do q pode ser? Muito obrigado!

1 Resposta

R

ninguém? :confused:

Criado 21 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 1
Participantes 1