wakko
Novembro 9, 2011, 9:02pm
#1
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?
wakko
Novembro 9, 2011, 10:33pm
#3
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.
wakko
Novembro 9, 2011, 11:09pm
#6
[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.
wakko
Novembro 10, 2011, 2:33pm
#9
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 …