Insercao hibernate

11 respostas
O

entao pessoal estou tentando inserir objetos em um banco postgresql e estou conseguindo,
porém cada vez que utilizo o metodo de insercao ele simplesmenete apaga tudo que tem no banco e inseri o q esta sendo passado como parametro para o metodo de insercao que eu criei(ou melhor, vi em um exemplo)

package Hiber;

import hiber.Amigos;
import hiber.AmigosDAO;
import org.hibernate.Session;

public class Gerenciadora {
    
    public static void main(String[] args) {
        Gerenciadora g = new Gerenciadora();
        
        
        g.inserir("navia", 2, "rua betel");
            

        AmigosDAO.getSessionFactory().close();
    }

    private void createAndStoreEvent(String title,int id,String endereco) {
        Session session = AmigosDAO.getSessionFactory().getCurrentSession();
        
        
        Amigos amigo=new Amigos();
        amigo.setid(id);
        amigo.setNome(title);
        amigo.setendereco(endereco);

        session.save(amigo);

        session.getTransaction().commit();

    }
    
   

}

por exemplo qnd eu executar esse metodo ele apagara todo o conteudo do banco e restara apenas o registro inserido
se alguem puder ajudar!!

11 Respostas

BrunoBastosPJ

Olha só… Pra começar não achei o método inserir na classe Gerenciadora, mas supondo que o método inserir seja o método createAndStoreEvent, vou te fazer umas perguntas…

Você está usando sempre o ID 2 para testar? Porque se não me engano o método save de Session funciona como um update caso a informação ja exista no banco… Será que não é por isso que você diz que ele esta apagando o que ja tinha?

Abs

O

é postei o codigo que eu tava mechendo, tentando fazer outro metodo
mas mesmo assim!!

o q me chamou a atencao foi q naquelas linhas em que ele mostra diversas informacoes sobre o hibernate depois q vc compila apareceu a linha:

12:47:57,953 DEBUG SchemaExport:303 - create table amigos (id int4 not null, nome varchar(255), endereco varchar(255), primary key (id))

pelo q eu entendi é como se ele tivesse criando uma nova tabela a cada compilacao

O

sei la continuo testando e acho estranho pra caramba!!
em jdbc umas que uma tupla foi adicionado pra retira de la so com delete
estranho!!

BrunoBastosPJ

O que tem na sua classe AmigoDAO? Posta ela ai!

O
package hiber;

import org.hibernate.*;
import org.hibernate.cfg.*;




public class AmigosDAO {
    private static final SessionFactory factory;
    
    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            factory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    
    public static SessionFactory getSessionFactory() {
        return factory;
    }
}
O

pessoal sera q ninguem pode ajudar???
a duvida faz sentido pois executei o projeto sem antes criar a tabela lá no postgre, e ele criou sozinho uma nova tabela!!
ou seja, todo vez que rodo o projeto ele cria uma novo tabela e perde-se os dados da tabela anterior
isso é normal??? estou comentendo algum erro???

L

Vc tah usando JPA ou direto hibernate?
Posta o teus arquivos de configuracao (persistence.xml ou hibernate.cfg.xml). Dentro desses arquivos deve estar dizendo para criar o banco toda vez que vc le suas classes, ai ele faz isso, apaga tudo e cria de novo (atualizando seu banco). Se vc naum quer mais que atualize, ai tem que comentar essa linha la.

O

olha nao sei o q é jpa mas acho q estou fazendo diretamente pelo hibernate

vou postar o arquivo hibernate.cfg.xml talvez ajude!!
<?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>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.url">jdbc:postgresql://localhost:5432</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">161086</property>
       
       <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
  
        

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>  
        


        <mapping resource="Amigos.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

obrigado

O

só pra acrescentar vou postar algumas linhas que aparecem no output qnd eu compilo:

13:25:28,625  INFO SchemaExport:154 - Running hbm2ddl schema export

13:25:28,625 DEBUG SchemaExport:170 - import file not found: /import.sql

13:25:28,625  INFO SchemaExport:179 - exporting generated schema to database

13:25:28,640 DEBUG SchemaExport:303 - drop table amigos

13:25:28,656 DEBUG SchemaExport:303 - drop sequence hibernate_sequence

13:25:28,656 DEBUG SchemaExport:303 - create table amigos (id int4 not null, nome varchar(255), endereco varchar(255), primary key (id))

13:25:28,671 DEBUG SchemaExport:303 - create sequence hibernate_sequence

13:25:28,671  INFO SchemaExport:196 - schema export complete

Hibernate: select nextval (hibernate_sequence)

Hibernate: insert into amigos (nome, endereco, id) values (?, ?, ?)

13:25:28,828  INFO SessionFactoryImpl:769 - closing

13:25:28,828  INFO DriverManagerConnectionProvider:147 - cleaning up connection pool: jdbc:postgresql://localhost:5432

BUILD SUCCESSFUL (total time: 4 seconds)

acho q ta ligado ao q vc disse de criar uma nova tabela

L

Eu nao vi a propriedade que ditava isso (hibernate.hbm2ddl.auto), seila se isso tem algum valor default ou esta pegando de outro lugar.

Procura por esse propriedade em:

http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html

E faz uns testes colocando ‘update’ e ‘validate’.

Mas seila, nao tendo essa propriedade setada, pelo que eu me lembro ele nao devia gerar a database.

BrunoBastosPJ

olinda:
só pra acrescentar vou postar algumas linhas que aparecem no output qnd eu compilo:

13:25:28,625  INFO SchemaExport:154 - Running hbm2ddl schema export

13:25:28,625 DEBUG SchemaExport:170 - import file not found: /import.sql

13:25:28,625  INFO SchemaExport:179 - exporting generated schema to database

13:25:28,640 DEBUG SchemaExport:303 - drop table amigos

13:25:28,656 DEBUG SchemaExport:303 - drop sequence hibernate_sequence

13:25:28,656 DEBUG SchemaExport:303 - create table amigos (id int4 not null, nome varchar(255), endereco varchar(255), primary key (id))

13:25:28,671 DEBUG SchemaExport:303 - create sequence hibernate_sequence

13:25:28,671  INFO SchemaExport:196 - schema export complete

Hibernate: select nextval (hibernate_sequence)

Hibernate: insert into amigos (nome, endereco, id) values (?, ?, ?)

13:25:28,828  INFO SessionFactoryImpl:769 - closing

13:25:28,828  INFO DriverManagerConnectionProvider:147 - cleaning up connection pool: jdbc:postgresql://localhost:5432

BUILD SUCCESSFUL (total time: 4 seconds)

acho q ta ligado ao q vc disse de criar uma nova tabela

Que IDE você está usando? Por acaso esta usando algum plugin do Eclipse?

Se for o Netbeans da uma olhada no seu build-impl.xml que fica dentro da pasta nbproject e olha se tem algum target no seu ant que manda apagar a tabela e criar outra…

Esgraçado isso acontecer na hora que está compilando o projeto…

Criado 5 de março de 2008
Ultima resposta 10 de mar. de 2008
Respostas 11
Participantes 3