Estou no exercício 16 desta página http://www.caelum.com.br/apostila-vraptor-hibernate/refatorando/#6-7-exercicios
Refatorando a classe AlteracaoDeContato mas tá dando o erro colocado no assunto deste post. Alguém pode me ajudar?
Meu código está no GitHub https://github.com/erickdeoliveiraleal/teste/tree/master/testehub
Para facilitar eu deixei o ultimo commit com o código errado e o penúltimo commit o código está funcionando.
PS.:Eu já tentei dar o session.close no método “procura”, mas ao fazer isso, ele encerra todas sessões e o método de alteração não consegue prosseguir.
Uhn, do jeito que foi passado no post indicado por você pode até funcionar, mas não é a mesma solução apresentada pela apostila
exemplo: [code]package br.com.caelum.goodbuy.testes;
import br.com.caelum.goodbuy.dao.ProdutoDao;
import br.com.caelum.goodbuy.modelo.Produto;
public class AdicaoDeProduto {
public static void main(String[] args) {
Produto produto = criaProduto();
new ProdutoDao().salva(produto);
}
private static Produto criaProduto() {
Produto produto = new Produto();
produto.setNome("Teclado");
produto.setDescricao("Teclado ABNT2");
produto.setPreco(35.90);
return produto;
}
}[/code]
mas vc entendeu porque o erro acontece?
nesse salvar não vai ter problema, mas se vc fizer o alterar vai dar problema porque vc vai buscar o objeto criando uma session , depois vc vai instanciar o ProdutoDao() que instancia outra session no construtor, e depois vai chamar o alterar que vai lançar a exception, isso por que vc buscou o objeto em uma session e ta tentando salvar ele em outra
uma solução é aquela que esta no post que vai acabar sendo o seu resultado no final depois dos exercícios
a outra e apos vc buscar o produto na primeira session fechar a session
1 curtida
é pq eu gostaria de usar a solução da apostila…
e quando eu tento fechar a conexão depois de buscar ele diz que a conexão foi fechada e não consegue alterar, é mole?
tenta assim
package br.com.caelum.goodbuy.testes;
import br.com.caelum.goodbuy.dao.ProdutoDao;
import br.com.caelum.goodbuy.modelo.Produto;
public class AlteracaoDeProduto {
public static void main(String[] args) {
ProdutoDao dao = new ProdutoDao();
Produto produto = dao.procura(1L);
produto.setNome("Modificado");
produto.setDescricao("Modificado2");
produto.setPreco(1.99);
dao.altera(produto)
}
}
como vc esta fechando coloca seu dao ai com a alteração fechando o session
Não, desse jeito dá certo e nem preciso fechar a sessão, é que eu queria fazer uma solução parecida com a da apostila mesmo… Mas vou deixar assim… E passar pro próximo capítulo.
Este código era para funcionar.Não entendi o que deu errado.
[quote=DaniloAndrade]tenta assim
package br.com.caelum.goodbuy.testes;
import br.com.caelum.goodbuy.dao.ProdutoDao;
import br.com.caelum.goodbuy.modelo.Produto;
public class AlteracaoDeProduto {
public static void main(String[] args) {
ProdutoDao dao = new ProdutoDao();
Produto produto = dao.procura(1L);
produto.setNome("Modificado");
produto.setDescricao("Modificado2");
produto.setPreco(1.99);
dao.altera(produto)
}
}
[/code][/quote]
Não li a apostila, mas pelo o que conheço ela deve chegar a um ponto que os DAOS serão assim:
[code]public ProdutoDao(Sesssion session) {
this.session = session;
}
Ai seus problemas seriam resolvidos.
[quote=Daniel.F]Este código era para funcionar.Não entendi o que deu errado.
[quote=DaniloAndrade]tenta assim
[code]
package br.com.caelum.goodbuy.testes;
import br.com.caelum.goodbuy.dao.ProdutoDao;
import br.com.caelum.goodbuy.modelo.Produto;
public class AlteracaoDeProduto {
public static void main(String[] args) {
ProdutoDao dao = new ProdutoDao();
Produto produto = dao.procura(1L);
produto.setNome("Modificado");
produto.setDescricao("Modificado2");
produto.setPreco(1.99);
dao.altera(produto)
}
}
[/code][/quote][/quote]
Deu certo sim, mas não é muito parecido com o modelo da apostila, na parte de inserir uma nova linha no banco.
E o código que eu coloquei acima? há erratas na apostila da Caelum e já encontrei algumas na apostila de Ruby.
O único jeito deste lógica funcionar é tirar o objeto de uma das sessões ou então usar uma sessão só passando-a par aos construtores
do objeto.