Zabeu
Setembro 23, 2009, 8:50am
#1
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
[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?
Zabeu
Setembro 23, 2009, 8:59am
#3
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
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
Zabeu
Setembro 23, 2009, 9:11am
#6
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
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
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