Error

galera alguém saberia me explicar do que se trata realmente esse erro:

Exception in thread “main” org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.com.caelum.goodbuy.modelo.Produto#1]

obrigada desde já.

Você está tentando pegar um registro com o Hibernate, passando algum valor pro ID desse objeto, mas ele não está achando… coloque mais informações, como o trecho onde ocorreu essa exceção…

Bonitinha…
kkk
Bom, como nosso amigo aí em cima disse, vc deve estar passando algo ou chamando um objeto que não existe ou foi instanciado, o mais provável seja passagem de parâmetro inexistente, ok?

posta o código do erro e onde vc tá usando o hibernate pra gente dar uma olhada.

bom essa é a minha classe que estou tentado executar:

public class AlteracaoDeProduto {
public static void main(String[] args){
AnnotationConfiguration configuration= new AnnotationConfiguration();
configuration.configure();

	SessionFactory factory= configuration.buildSessionFactory();
	Session session= factory.openSession();
	
	//carrega o produto do banco de dados
	Produto produto=(Produto) session.load(Produto.class, 1L);
	
	Transaction tx= session.beginTransaction();
	produto.setPreco(42.50);
	session.update(produto);
	tx.commit();
	
}

e tenho a classe de produto:

@Id @GeneratedValue
private Long id;
private String nome;
private String Descricao;
private Double preco;

//getter e setters

ainda não consigo enxergar o erro:(

Produto produto=(Produto) session.load(Produto.class, 1L);

Tenho certeza que não existe no seu banco de dados um registro com o id 1, conforme está sendo passado no parametro… crie um registro com id 1, ou passe outro valor aqui…

ah ja ia esquecendo antes dessa classe de alteração eu fiz uma de add:
AnnotationConfiguration configuration= new AnnotationConfiguration();
configuration.configure();

	SessionFactory factory= configuration.buildSessionFactory();
	Session session= factory.openSession();
	
	
	Produto produto= new Produto();
	produto.setNome("Prateleira");
	produto.setDescricao("Uma prateleira para colcoar livros");
	produto.setPreco(35.90);
	
	Transaction tx= session.beginTransaction();
	session.save(produto);
	tx.commit();

bom acho que o erro seria pq estou usando o id como auto_increment?

Não, isso é correto… o problema é que voce está sempre tentando recuperar o registro de ID 1 lá em cima…

marcelo era isso mesmo…

mas não tem como envez de colocar.por exemplo: 1L
colocar para ele pegar por sequencia?ou algo do tipo…sem ter que ficar mexendo no codigo?

Voce teria que fazer uma query diferente, usando Criteria ou HQL… não sei se voce está usando esse código como tutorial, se estiver recomendo que simplesmente adicione o registro com ID 1 no seu banco e continue com o tutorial… se não estiver, então dá uma estudada sobre esses dois métodos que falei, Criteria e HQL…

Com eles, voce consegue recuperar uma lista com todos os registros existentes, daí voce pode alterá-los um por um… usando o session.load() voce estará sempre buscando por um registro especifico, logo deve saber o ID dele antes…

entendi Marcelo…e realmente estou estudando por um tutorial…
vou fazer como vc disse,vou continuar estudando por ele…e amis p/ frente eu aprendo de outras formas…

muito obrigada pela ajuda…

bjus

É, eu percebi que era um tutorial, por isso nem entrei em muitos detalhes, senão você vai acabar se complicando mais ainda… provavelmente, mais pra frente nesse tutorial, devem ter alguns exemplos disso que estou falando… mas vá seguindo os passos com calma e entendendo cada passo, não avance sem ter compreendido o capitulo em que você está… e qualquer dúvida, grite aqui pra nós ! :thumbup:

pode deixar, com certeza rs :stuck_out_tongue: …valeuuuuuuu

no lugar do 1L você pode informar número do ID como 1, 2 ou 3…

estou com o mesmo problema, estou com o mesmo exercio acima, mas quando eu execulto apaga o banco de as linhas do banco de dado, ja tentei subistituir a “1L” por um numero, mas continua o mesmo erro