Problemas com o update - Hibernate

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 ?

E ai galera, ngm :frowning:

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 !

alguma ideia ?

poxa vida, 2 dias e ngm…

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.