Hibernate

7 respostas
diogoprosoft

Galera estou novamente pedindo a ajuda de vcs :D

Estou fazendo o exemplo de hibernate da apostila caelum mais não estou conseguindo gravar no banco.
Eu executo minha classe ele me retorna o codigo inserido mais vou olhar no banco não está lá os dados que inseri.

Meu código é esse

public class AdicionaProduto {

    public static void main(String[] args) {
        Session session = new HibernateFactory().getSession();
        Produto p = new Produto();
        p.setNome("Nome aqui");
        p.setDescricao("Descrição aqui");
        p.setPreco(100.50);
        session.save(p);
        System.out.println("ID do produto: " + p.getId());
        session.close();
    }

Meu DAO

public class ProdutoDAO {

    private Session session;

    public ProdutoDAO(Session session) {
        this.session = session;
    }

    public void salva(Produto p) {
        this.session.save(p);
    }

    public void remove(Produto p) {
        this.session.delete(p);
    }

    public Produto procura(Long id) {
        return (Produto) this.session.load(Produto.class, id);
    }

    public void atualiza(Produto p) {
        this.session.update(p);
    }

Pq será que não está gravando? alguém pode me ajudar?

7 Respostas

Rafael_Steil

No seu hibernate.properties, coloque a linha abaixo e veja se resolve:

hibernate.connection.autocommit true

Rafael

mateusprado

diogo, vc tem que criar uma transação e dar um commit.

//imports

import org.hibernate.Transaction;

public static void main(String[] args) {   
        Session session = new HibernateFactory().getSession();   
        Produto p = new Produto();   
        p.setNome("Nome aqui");   
        p.setDescricao("Descrição aqui");   
        p.setPreco(100.50); 
        
        Transaction t = session.beginTransaction();
        session.save(p);
        t.commit();
        System.out.println("Feito.");   
        System.out.println("ID do produto: " + p.getId());   
        session.close();   
}

tente ai.

diogoprosoft

Valeu, segui a dica do mateus e do rafael e deu certo

Eu gostaria de saber se ao inves de usar o save para gravar e update para alterar tem como usar um só para os dois?

rafaelglauber
session.saveOrUpdate(p);
diogoprosoft

eu tentei usar o SaveorUpdate, mais ao invés de alterar ele gravou novamente.
Tipo eu sei que devo passar algo como parametro para alterar em jdbc eu fazia um Update com um where para alterar na mesma linha
Como que faço isso no hibernate para que ele saiba se vou gravar ou alterar

meu codigo

public class AdicionaProduto {

     public static void main(String[] args) throws Exception {
        Session session = new HibernateFactory().getSession();
        Produto p = new Produto();        
        p.setNome("Capacete");
        p.setDescricao("EBF7 Cores");
        p.setPreco(65.0);

        Transaction t = session.beginTransaction();
        session.saveOrUpdate(p);
        t.commit();
        System.out.println("Gravado com sucesso");
        System.out.println("ID do produto: " + p.getId());
        session.close();
     }
    
}
rafaelglauber

procure por: Automatic state detection nesse link: http://www.hibernate.org/hib_docs/v3/reference/en/html/objectstate.html

mas realmente temos algumas limitações quanto a isso, por exemplo, para que ele salve você tem primeiro que “carrega-lo” no banco de dados não basta “setar” todas as propriedades igualmente a um objeto já persistido, ele só faz a mundaça de estado do objeto gravado dessa maneira, se não ele entenderá que a solicitação é para persistir um novo objeto com o estado igual a outro que já tem no banco de dados.

J

Oi Pessoal!

Estou tentando fazer um mapeamento de uma tabela A que tem um auto-relacionamento many-to-many com uma associação B (B tem um atributo e possui chaves compostas). Porém a abordagem para o modelo físico é que essa associação vire uma Tabela B.
Eu estou utilizando Hibernate Anotations. Já li um bocado de tutoriais e vários foruns, mas não encontrei algo que me ajude a resolver esse quebracabeça.

Alguem de vcs me poderia dar um exemplo de como solucionar o auto-relacionamento no momento de fazer o mapeamento e além disso, como solucionar o fato das chaves compostas.

Muito grata pela sua ajuda!

Criado 28 de maio de 2008
Ultima resposta 28 de mai. de 2008
Respostas 7
Participantes 5