Galera,
tenho 2 tabelas no banco ligadas por uma foreign-key.
[URL=http://img175.imageshack.us/i/tabelasu.png/]
[/URL]
Estou tentando alterar 1 ou mais campos, só que na hora que ele está alterando ou ele dá um erro ou ele altera só da tabela clienteFisico e na foreign-key da tabela, o endereco fica NULL, ou seja, ele “esquece” qual numero estava la !
Codigos :
função alterar:
public void alterar(Cliente e){
Transaction trans = sessions.beginTransaction();
sessions.update(e);
trans.commit();
sessions.refresh(e);
sessions.flush();
}
jsp que recebe o cliente atraves de um form:
[code]<%–
Document : recebeEditar.jsp
Created on : 16/06/2010, 14:08:01
Author : Leonardo
–%>
<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
<%@page import=“pedidos.controller.Cadastros” %>
<%@page import=“pedidos.model.ClienteFisico” %>
<jsp:useBean id =“cliente” class=“pedidos.model.ClienteFisico” scope=“page”>
<jsp:setProperty name=“cliente” property = “nome” param=“nome”/>
<jsp:setProperty name = “cliente” property=“rg” param=“rg”/>
<jsp:setProperty name = “cliente” property=“id_cliente” param=“id”/>
</jsp:useBean>
<jsp:useBean id = “endereco” class = “pedidos.model.Endereco” scope = “page”>
<jsp:setProperty name = “endereco” property=“rua” param=“rua”/>
<jsp:setProperty name = “endereco” property=“bairro” param=“bairro”/>
<jsp:setProperty name = “endereco” property=“cidade” param=“cidade”/>
<jsp:setProperty name = “endereco” property=“estado” param=“estado”/>
<jsp:setProperty name = “endereco” property =“numero” param=“numero”/>
</jsp:useBean>
<%
Cadastros cd = new Cadastros();
cd.alterarCliente(cliente);
out.print(“Sucesso !”);
%>
JSP Page
Hello World!
[/code]
Obs. o metodo alterarCliente chama simplesmente o alterar ali de cima !
Ele esta cadastrando corretamente, o problema esta sendo no editar !
Como posso resolver isso ?
Fala aew leonardo2204, beleza?
Posta aí seu mapeamento das entidades para vermos como ficou.
Abraço.
Schwingel
Cliente:
[code]<?xml version="1.0" encoding="UTF-8"?>
[/code]
Endereco:
[code]<?xml version="1.0" encoding="UTF-8"?>
[/code]
Vlw pela resposta !
Fiz algumas alterações nos meus JSP’s e na minha classe Sessao e agora ele esta alterando !
Só que tem um problema.
Para cada alteração que eu faço, ele cria um novo endereço no banco, tipo, ele num atualiza o que ja existe !
Pelo menos ele esta atualizando na tabela cliente o endereco para o id certo, nao esta mais ficando nulo !
Segue codigos :
alterar :
public void alterar(Cliente e) {
sessions.clear();
Transaction trans = sessions.beginTransaction();
sessions.update(e);
trans.commit();
}[/code]
jsp que recebe os campos :
[code]<%--
Document : recebeEditar.jsp
Created on : 16/06/2010, 14:08:01
Author : Leonardo
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="pedidos.controller.Cadastros" %>
<%@page import="pedidos.model.*" %>
<%@page import="org.hibernate.Session" %>
<%@page import="configs.HibernateUitl" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id ="cliente" class="pedidos.model.ClienteFisico" scope="page">
<jsp:setProperty name="cliente" property = "nome" param="nome"/>
<jsp:setProperty name = "cliente" property="rg" param="rg"/>
<jsp:setProperty name = "cliente" property="id_cliente" param="id"/>
</jsp:useBean>
<jsp:useBean id = "endereco" class = "pedidos.model.Endereco" scope = "page">
<jsp:setProperty name = "endereco" property="rua" param="rua"/>
<jsp:setProperty name = "endereco" property="bairro" param="bairro"/>
<jsp:setProperty name = "endereco" property="cidade" param="cidade"/>
<jsp:setProperty name = "endereco" property="estado" param="estado"/>
<jsp:setProperty name = "endereco" property ="numero" param="numero"/>
</jsp:useBean>
<%
Session sessao = HibernateUitl.getSessionFactory().openSession();
ClienteFisico cf = (ClienteFisico) sessao.get(ClienteFisico.class, cliente.getId_cliente());
Endereco end = (Endereco)sessao.get(Endereco.class,cliente.getId_cliente());
cf.setNome(cliente.getNome());
cf.setRg(cliente.getRg());
cf.setEndereco(endereco);
Cadastros cd = new Cadastros();
cd.alterarCliente(cf);
out.print("Sucesso !");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Obrigado e um abraço !
cara comigo sempre funciona assim:
public void alterar(Cliente e) {
Session session = factory.openSession();
Transaction trans = session.beginTransaction();
sessions.update(e);
session.flush();
trans.commit();
session.close();
}
cara não to J2SE para testar.
cara sempre abro uma nova session e uma transação e atualizo o objeto
e do um flush() e logo apos uma commit() e fecho a session.
sempre da certo comigo.
O problema eh que seu formulario nao possui nenhum ID de endereco. Entao, mesmo que o bean usado na hora de construir o formulario tenha um ID, este valor nao eh passado de volta quando o formulario eh enviado de volta. Entao, como o ID eh nulo (nao fornecido), ele interpreta como se fosse um endereco novo.