Hibernate Cria Coluna ID sozinho ? [Resolvido]

5 respostas
romarcio

Seguinte, estou montando uma aplicação desktop com mysql e hibernate.

Criei os mapeamentos em xml. O que acontece é que quando insiro um item, é gerado uma coluna ID no banco por conta.

por exemplo tenho a seguinte tabela:

depois que salvo um item fica assim no banco:

mas o id inserido é inserido apenas na 1ª coluna na coluna criada automaticamente fica null.

mapeamento

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class mutable="true" name="loterica.model.Clientes" table="CLIENTES">

     <id name="id" column="ID" type="long" unsaved-value="null">
         <generator class="identity"/>
     </id>

     <property name="nome" type="string"/>
     <property name="sobre_nome" type="string"/>

  </class>
</hibernate-mapping>

Classe:

public class Clientes{

    private Long id;
    private String nome;
    private String sobre_nome;

    ... + métodos get/set ...

no Dao onde executo o insert

...
public void insert(Clientes clientes) throws Exception {
        Session session = null;
        try {
            //abre a sessao
            session = sessionFactory.openSession();
            System.out.println("Inserindo Registro!!!");
            //inicia a transacao
            Transaction transaction = session.beginTransaction();
            //salva na sessao o objeto
            session.save(clientes);
            //executa o commit
            transaction.commit();
            System.out.println("Registro Inserido!");
        } catch (Exception  e) {
            System.out.println(e.getMessage());
        } finally {
            session.flush();
            session.close();
        }
    }

sql do insert

Inserindo Registro!!!
Hibernate: 
    insert 
    into
        CLIENTES
        (nome, sobre_nome) 
    values
        (?, ?)
Registro Inserido!

Tabela no banco

CREATE TABLE `clientes` (
  `ID` int(11) NOT NULL auto_increment,
  `NOME` varcha(20) NOT NULL,
  `SOBRE_NOME` varchar(50) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

O hibernate pode criar essa coluna ID sozinho ?

5 Respostas

hvivox

Preciso que vc post seu arquivo de hibernate.cfg, posta tbm o hibernate.properts caso vc esteja usando, o problema pode está nesses arquivos

romarcio

hvivox:
Preciso que vc post seu arquivo de hibernate.cfg, posta tbm o hibernate.properts caso vc esteja usando, o problema pode está nesses arquivos

Só estou utilizando o properties

hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost:3306/loteria
hibernate.connection.username = root
hibernate.connection.password = 
hibernate.show_sql = true
hibernate.format_sql = true
hibernate.hbm2ddl.auto = update
hibernate.cache.provider_class = org.hibernate.cache.EhCacheProvider
mynameisflaw

Remove a linha “hibernate.hbm2ddl.auto = update” do properties

hvivox

Isso mesmo remove a linha recomendada ou vc pode faze melhor comenta a linha pq vc pode precisar dela.

Na verdade essa linha é responsavel por fazer o MOR (Mapeamento Objeto Relacional) toda vez que vc rodar a tua aplicação esse comando verifica se vc tem alguma classe de persistencia (bean, pojo…) nova se vc tiver ele vai irá criar uma tabela no banco referente a tua classe.

Da uma linda na documentação do hibernate nas primeiras páginas fala desse comando.

Se der problema volte a postar.

flw.

romarcio

Valeu hvivox, era isso mesmo.

Criado 1 de janeiro de 2010
Ultima resposta 2 de jan. de 2010
Respostas 5
Participantes 3