Auto Incremento Hibernate

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

por favor me ajudem :slight_smile:

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

ai eu fiz as classes

[code]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;
}

}[/code]

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

qual banco de dados vc usa?

Mysql no momento.

O campos já esta autoIncremento la…

[quote=Zabeu]Amigos sou novo em Java/Hibernate e tenho um duvida no Hibernate

por favor me ajudem :slight_smile:

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

ai eu fiz as classes

[code]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;
}

}[/code]

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[/quote]

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

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

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?

[quote=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[/quote]

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

[quote=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?[/quote]

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?

[quote=ralphsilver][quote=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[/quote]

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

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

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