Erro ao tentar inserir chave estrangeira

Esta com erro.

Produto

erro em CascadeType.ALL

Fornecedor

erro em CascadeType.SAVE_UPDATE

Vc deve ter feito o import do arquivo errado…os imports do @FetchType, @Cascade, @CascadeType e @FetchMode vc usa os seguintes pacotes:

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

Daeh padcoe, bom dia!
vichh cara… Eu ja tinha adicionado todas esses pacotes, so que CascadeType não tem ;/

entao vc esta usando o jar errado ou esta faltando jar

http://www.hibernate.org/hib_docs/annotations/api/org/hibernate/annotations/CascadeType.html

vc tem o hibernate-annotations ai?

eu fiz da seguinte forma:

sumiu o erro e eu fui tentar adicionar novamente um produto com a FK e deu outro erro.

Pelo jeito está dizendo q não tem o fornecedor com id 6 neh? ou estou errado?
Mas o fornecedor com essa id tem sim =/

idfornecedor | cnpj | nome --------------+----------+------ 6 | 68468422 | XXX

eu resolvi o problema do import… era porque o javax.persistence.CascadeType estava na lista tbm, ai eu tirei ele e colokei o outro.
mas o erro continua.

vc sabe debugar?

coloca seu código entre um try / catch ( no catch vc coloca: } catch(BatchUpdateException ex) ) e na linha debaixo vc poe ex.printstacktrace();

coloca o breakpoint nessa linha ex.printstacktrace e depois da um clique duplo no ex e vai em “Watch…” ( supondo q vc use eclipse ) e navega até o getNextException() e cola ai o q ele ta lançando :slight_smile:

Caramba cara, eu tive aula disso segunda feira e não estou lembrando como se faz…

AdicionarProduto

[code]public class AdicionaProduto {

public static void main(String[] args) {
	Session session = new HibernateFactory().getSession();


	Produto p = new Produto();
	p.setNome ("Pen driver 1GB");
	p.setDescricao("preto");
	p.setPreco(17.99);
	p.setFornecedores(new ArrayList());
	p.getFornecedores().add(new Fornecedor());  
	p.getFornecedores().get(0).setIdfornecedor(6);
	
	
	ProdutoDAO produtoDAO = new ProdutoDAO(session);
	produtoDAO.salva(p);
	
	//session.beginTransaction();
	//session.save(p);
	//session.getTransaction().commit();
	
			
	System.out.println("ID do produto:" + p.getId());
	
	session.close();
}

}[/code]

é nessa classe que tem que fazer, ne?

public class AdicionaProduto {

	
	public static void main(String[] args) {
		Session session = new HibernateFactory().getSession();
		try {
			Produto p = new Produto();
			p.setNome ("Pen driver 1GB");
			p.setDescricao("preto");
			p.setPreco(17.99);
			p.setFornecedores(new ArrayList());
			p.getFornecedores().add(new Fornecedor());  
			p.getFornecedores().get(0).setIdfornecedor(6);
			
			
			ProdutoDAO produtoDAO = new ProdutoDAO(session);
			produtoDAO.salva(p);
			
			//session.beginTransaction();
			//session.save(p);
			//session.getTransaction().commit();
			
					
			System.out.println("ID do produto:" + p.getId());
			
			session.close();
		} catch (BatchUpdateException  ex) {
			ex.printstacktrace();
		}

	}

}

Coloca o breakpoint no ex.printsatcktrace

O que é esse breakpoint? :roll:

olha o erro que está dando:

org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) at br.com.caelum.hibernate.dao.ProdutoDAO.salva(ProdutoDAO.java:23) at br.com.caelum.hibernate.AdicionaProduto.main(AdicionaProduto.java:29) Caused by: java.sql.BatchUpdateException: Batch entry 0 update Fornecedor set cnpj=0, nome=NULL, banana_fornecedor=NULL where idfornecedor=6 was aborted. Call getNextException to see the cause. at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2530) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1317) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:350) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2592) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) ... 9 more

já tentou passar algum valor diferente de 0 para o cnpj?

Daeh padcoe, blz amigo? apareceu neh =P
David é vc que me adicionou la?

Então amigo, eu adicionei fornecedor com valor do cnpj diferente de 0. Olha aí

idfornecedor | cnpj | nome --------------+----------+------ 6 | 68468422 | XXX

debuga seu objeto e verifica o valor que está em CNPJ…ve se vc nao ta tentando salvar ele com ‘0’

Daeh padcoe, boa tarde maninho!! blz?
Cara, eu nao sei debugar o objeto. sou moh iniciante ainda… afff
Uma coisa q eu estava reparando é que no erro mostra um erro ao tentar fazer update no fornecedor, sendo que eu estou tentando adicionar um produto, por isso aparece aquele negocio de cnpj e cnpj nao tem nd vê com produto. Não tem algo errado ai não? :roll: :roll:

olha ai o erro!

abraço!!