Auto Incremento Hibernate

9 respostas
Z

Amigos sou novo em Java/Hibernate e tenho um duvida no Hibernate

por favor me ajudem :)

Preciso fazer com que o campo cod da tabela de cores seja autoincremento no Hibernate.

ai eu fiz as classes

public class cores {
    private int cod;
    private String cor;
    private int numero_cor;

    public cores(){
    }

    public int getCod() {
        return cod;
    }
    public void setCod(int cod) {
        this.cod = cod;
    }

    public String getCor() {
        return cor;
    }
    public void setCor(String cor) {
        this.cor = cor;
    }

    public int getNumero_cor() {
        return numero_cor;
    }
    public void setNumero_cor(int numero_cor) {
        this.numero_cor = numero_cor;
    }
    
    
    
}

e tambem programei o mapeamento

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0/EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name ="cores" table="_m_cad_cores">
        <id name="cod" />
        <property name ="cor" />
        <property name ="numero_cor" />
    </class>
</hibernate-mapping>

agora eu preciso saber oque modificar no mapeamento para o cod ser autoincremento !!

E o cod de inserção como faço??? uso o metodo setCod ??? ou não preciso chamar ele pois o Hibernate irá setar automaticamente?

olha como esta este metodo de inserção:

SessionFactory fabrica = new Configuration().configure().buildSessionFactory();
            Session sessao = fabrica.openSession();
            cores Cores = new cores();
            Cores.setCod(888);
            Cores.setCor("AZULLLaaAO");
            Cores.setNumero_cor(134);
            Transaction tx_cores = sessao.beginTransaction();
            sessao.save(Cores);
            tx_cores.commit();
            sessao.clear();

Muito obrigado !!

vlw turma

9 Respostas

ralphsilver

qual banco de dados vc usa?

Z

Mysql no momento.

O campos já esta autoIncremento la…

ralphsilver
Zabeu:
Amigos sou novo em Java/Hibernate e tenho um duvida no Hibernate

por favor me ajudem :)

Preciso fazer com que o campo cod da tabela de cores seja autoincremento no Hibernate.

ai eu fiz as classes

public class cores {
    private int cod;
    private String cor;
    private int numero_cor;

    public cores(){
    }

    public int getCod() {
        return cod;
    }
    public void setCod(int cod) {
        this.cod = cod;
    }

    public String getCor() {
        return cor;
    }
    public void setCor(String cor) {
        this.cor = cor;
    }

    public int getNumero_cor() {
        return numero_cor;
    }
    public void setNumero_cor(int numero_cor) {
        this.numero_cor = numero_cor;
    }
    
    
    
}

e tambem programei o mapeamento

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0/EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name ="cores" table="_m_cad_cores">
        <id name="cod" />
        <property name ="cor" />
        <property name ="numero_cor" />
    </class>
</hibernate-mapping>

agora eu preciso saber oque modificar no mapeamento para o cod ser autoincremento !!

E o cod de inserção como faço??? uso o metodo setCod ??? ou não preciso chamar ele pois o Hibernate irá setar automaticamente?

olha como esta este metodo de inserção:

SessionFactory fabrica = new Configuration().configure().buildSessionFactory();
            Session sessao = fabrica.openSession();
            cores Cores = new cores();
            Cores.setCod(888);
            Cores.setCor("AZULLLaaAO");
            Cores.setNumero_cor(134);
            Transaction tx_cores = sessao.beginTransaction();
            sessao.save(Cores);
            tx_cores.commit();
            sessao.clear();

Muito obrigado !!

vlw turma

no seu xml de configuração... altera a tag id para:

<id name="cod" >
      <generator class="increment"/>
    </id>

aí na hora de salvar não precisa setar nada nesse atributo.. o Mysql irá auto incrementar

renanreismartins

ralphsilver que diferença faz o banco ? ¬¬ o hibernate abstrai…

Zabeu da uma olhada aki:
http://developer.spikesource.com/wiki/index.php/Getting_started_with_hibernate

a documentação tb aborda a tag id

considere usar annotations, é bem mais facil que escrever xml…

abrasss

Z

ralphsilver eu não precisei fazer isto … sabe oque eu fiz ? claro chutando …mas funcionou…

Como o campo cod esta autoincrement no Mysql… a unica coisa que eu fiz foi retirar a linha .setCod(888)

Não setei nenhum cod…ai foi auto incrementado :smiley:

não pode ser assim?

ralphsilver

renanreismartins:
ralphsilver que diferença faz o banco ? ¬¬ o hibernate abstrai…

Zabeu da uma olhada aki:
http://developer.spikesource.com/wiki/index.php/Getting_started_with_hibernate

a documentação tb aborda a tag id

considere usar annotations, é bem mais facil que escrever xml…

abrasss

Eu pensei especificadamente no banco porque no caso de Oracle (por exemplo) o melhor meio é utilizando Sequence.

ralphsilver

Zabeu:
ralphsilver eu não precisei fazer isto … sabe oque eu fiz ? claro chutando …mas funcionou…

Como o campo cod esta autoincrement no Mysql… a unica coisa que eu fiz foi retirar a linha .setCod(888)

Não setei nenhum cod…ai foi auto incrementado :smiley:

não pode ser assim?

Funciona sim… vc enviando nulo para o mysql, ele automaticamente vai autoincrementar. Mas uma forma organizada seria colocando esse autoincremento na configuração.

Aproveitando o tópico, me surgiu uma dúvida: quando agente seta um auto incremento, o hibernate ve como um auto incremento do banco ou ele ve um número ideal para setar na tabela?

ralphsilver

ralphsilver:
renanreismartins:
ralphsilver que diferença faz o banco ? ¬¬ o hibernate abstrai…

Zabeu da uma olhada aki:
http://developer.spikesource.com/wiki/index.php/Getting_started_with_hibernate

a documentação tb aborda a tag id

considere usar annotations, é bem mais facil que escrever xml…

abrasss

Eu pensei especificadamente no banco porque no caso de Oracle (por exemplo) o melhor meio é utilizando Sequence.

Só para complementar, concordo com o renanreismartins e também indico utilizar JPA, pois é um padrão dos frameworks de persistencia.

renanreismartins

qdo vc seta @GeneratedValue(strategy = GenerationType.AUTO) o provedor de persistencia escolhe a melhor maneira de gerar a chave primaria de acordo com o banco utilizado.

qdo vc utiliza a opçao GenerationType.IDENTITY usa um recurso de auto incremento do banco para preencher o valor, este valor talvezs pode nao estar disponivel ateh o fim da transacao. E finalmente com GenerationType.SEQUENCE pode-se gerar sequencias para a chave como de 2 em 2… ex: 2, 4, 6…

apenas corrigindo, falei para usar annotations que pode ser usada tanto com jpa como com hibernate puro…

abrasssss

Criado 23 de setembro de 2009
Ultima resposta 23 de set. de 2009
Respostas 9
Participantes 3