Update no Objeto persistido

Opa galera, é o seguinte estou salvando um objeto no banco,
e estou utilizando auto incremento neste objeto …
Quando salvo ele no banco nao passo o ID dele ou seja, vai ser gerado quando for
salvo …

Logo após salvar o objeto preciso pegar esse id … Já tentei pegar do atributo da classe
que foi anotado, entretanto retorna 0 …

Como posso resolver ?

PS. SE pego o mesmo objeto que acabei de incluir e altero alguma coisa e mando salvar novamente
ele faz update …

Obrigado desde Já …

Você usa JDBC puro ou algum framework?

Esqueci de mencionar … Estou utilizando Hibernate …

Tem como postar os códigos para entendermos melhor?

Quando uso hibernate aqui, não tenho problemas com isso. Assim que persisto, basta buscar o objeto novamente que ele já terá o id preenchido.

Até +!

Então o objeto persistido terá o id salvo após o processo.

Quando você salva o objeto com o hibernate o objeto passa a receber o id que recebeu no banco de dados. é só fazer um getId() no objeto após ele ter sido salvo.

[code]<?xml version="1.0" encoding="UTF-8"?>

org.hibernate.dialect.DerbyDialect org.apache.derby.jdbc.ClientDriver jdbc:derby://localhost:1527/sample app app
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>

<mapping class="model.Equipamento" />
  </session-factory>
[/code]

[code]package dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

public abstract class GenericDao {

protected Session session;
protected Class classe;

public GenericDao(Session session, Class classe) {
    this.session = session;
    this.classe = classe;
}

public T find(Integer pk) {
    Transaction tx = session.beginTransaction();
    T obj = (T) session.load(classe, pk);
    session.flush();
    tx.commit();
    return obj;
}

public void salvar(T classe) {
    try {
        Transaction tx = session.beginTransaction();
        session.save(session.merge(classe));
        tx.commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void alterar(T classe) {
    Transaction tx = session.beginTransaction();
    session.update(classe);
    tx.commit();
}

public void excluir(T classe) {
    try {
        Transaction tx = session.beginTransaction();
        session.delete(session.merge(classe));
        tx.commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public List listar() {
    Transaction tx = session.beginTransaction();
    Criteria crit = session.createCriteria(classe);
    List lista = crit.list();
    tx.commit();
    return lista;
}

public List listLike(String campo, String value) {
    Transaction tx = session.beginTransaction();
    Criteria crit = session.createCriteria(classe);
    crit.add(Restrictions.like(campo, value));
    List lista = crit.list();
    tx.commit();
    return lista;
}

public List listEq(String campo, String value) {
    Transaction tx = session.beginTransaction();
    Criteria crit = session.createCriteria(classe);
    crit.add(Restrictions.eq(campo, value));
    List lista = crit.list();
    tx.commit();
    return lista;
}

}
[/code]

[code]

s = HibernateUtil.getSessionFactory().openSession();
dDao = new DerivacaoDao(s);

derivacao = null;
derivacao = new Derivacao();

    derivacao.setDsDerivacao(jFdescDerivacao.getText());
    derivacao.setSigla(jFsiglaDerivacao.getText());
    derivacao.setSituacao('A');
    dDao.salvar(derivacao);[/code]

Wakko,

Depois do dDao.salvar(derivacao), se você fizer um “derivacao.getId()” , retorna 0? Muito estranho.

Uma coisa óbvia para verificar. Essa nova informação foi gravada na base de dados com um ID diferente de 0?

Caso positivo, mostra a classe de mapeamento para gente

Mostre também a classe que chama o método salvar.

package model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class Derivacao implements Serializable{

@Id
@GeneratedValue(strategy=GenerationType.TABLE)
private int cdDerivacao;

private String dsDerivacao;

@Column( length=2)
private String sigla;

private char situacao;

    public Derivacao() {
    }

    public int getCdDerivacao() {
        return cdDerivacao;
    }

    public void setCdDerivacao(int cdDerivacao) {
        this.cdDerivacao = cdDerivacao;
    }

    public String getDsDerivacao() {
        return dsDerivacao;
    }

    public void setDsDerivacao(String dsDerivacao) {
        this.dsDerivacao = dsDerivacao;
    }

    public String getSigla() {
        return sigla;
    }

    public void setSigla(String sigla) {
        this.sigla = sigla;
    }

    public char getSituacao() {
        return situacao;
    }

    public void setSituacao(char situacao) {
        this.situacao = situacao;
    }

    

}

A classe que salva é uma tela … É aquele código que coloquei acima …