Hibernate script sql

Pessoal,

Tenho uma classe chamada Cliente que é uma @Entity e representa a tabela tb_cliente na minha base de dados.
Nesta classe existem diversos atributos e quando gero o script sql pelo

new SchemaExport(cfg).create(true,true); o hibernate cria os campos “fora de ordem” na tabela.

Exemplo:

@Entity 
@Table(name="tb_cliente")
public class Cliente implements Serializable {
	
	private static final long serialVersionUID = 4617608073307161826L;
	
	private Integer id;
	private String nome;
	private String cpf;
	private String cnpj;

                ...
}

e o script fica:

create table tb_cliente (
        id int4 not null,
        cnpj varchar(14),
        cpf varchar(11),
        nome varchar(150),
       ...
}

Alguém sabe como faço (ou onde encontro material) para que o hibernate obedeça a minha ordem quando os campos forem criados ? Ou se existe alguma restrição ?

Obrigado

plug-in,

De uma olhada no Guia de Referencia do Hibernate:

:arrow: http://www.hibernate.org/hib_docs/v3/reference/en/pdf/hibernate_reference.pdf

Desculpe a pergunta, mas porque você necessita que os campos fiquem em uma determinada ordem, sendo que quem irá traba-lo éo Hibernate?

fsquadro,

Obrigado pela dica! Já havia consultado o Guia de Referência mas não consegui evoluir. Pelo Google tb não consegui muita coisa, procurando por “SchemaExport”, “Hibernate” e “DDL”, …
Pelo jeito não é algo trivial :?

Quanto a sua pergunta, este eh o primeiro projeto da empresa usando Hibernate e existe um padrão na base de dados que gostaria de continuar seguindo mas isso tb não eh nada desesperador.

plug-in, verifique a ordem que seus getter’s estão.

Percebi que seu Id não está anotado no atributo, então creio que esteja anotado no getter. O que acontece? O hibernate quando vai inicializar, varre sua classe primeiro procurando pela anotação @Id. Ao encontrá-la (no getter ou no atributo) ele assume que você irá sempre anotar nos elementos daquele tipo (se anotou no getter, ele procura as outras anotações nos outros getters).

Então provavelmente(não tenho absoluta certeza) o Hibernate está se baseando na ordem dos seus getters pra gerar o script do seu banco :wink:

plentz,

No exemplo citado omiti os getters e setters mas as anotações estão no getters como vc mesmo disse.
Tb imaginei que a ordem dos getters e respectivas anotações seria a ordem do script, mas ao invés disso o Hibernate utiliza outro caminho. Mistério… :roll:

Obrigado pelo retorno.

Na pior das hipóteses, sempre tem a possibilidade de criar as tabelas manualmente. Que é o que eu geralmente faço.

[]'s

Rodrigo Auler