Update no Objeto persistido

8 respostas
W

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á …

8 Respostas

romarcio

Você usa JDBC puro ou algum framework?

W

Esqueci de mencionar … Estou utilizando Hibernate …

vinnysoft

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é +!

romarcio

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.

W
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
    <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
    <property name="hibernate.connection.url">jdbc:derby://localhost:1527/sample</property>
    <property name="hibernate.connection.username">app</property>
    <property name="hibernate.connection.password">app</property>

    <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>
</hibernate-configuration>
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<T> {

    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;
    }

}
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);
Jair_Rillo_Junior

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

Hebert_Coelho

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

W
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 …

Criado 9 de novembro de 2011
Ultima resposta 10 de nov. de 2011
Respostas 8
Participantes 5