Geração de Id com zero a esquerda no Hibernate [RESOLVIDO]

6 respostas
O

Boa tarde a todos. Preciso gerar um Id numa tabela Mysql usando Hibernate, mas esse Id deve ter 13 dígitos e ser sequencial.

Por exemplo: o primeiro item deve ser 0000000000001, o segundo 0000000000002, etc…

Lembrando que normalmente o Hibernate gera o Id assim:
Item 1 = Id 1 (Mas preciso Item 1 = Id 0000000000001)
Item 2 = Id 2 (Mas preciso Item 2 = Id 0000000000002)

No MySql, pra gerar essa tabela com esse Id, deve-se usar a seguinte sintaxe: int(13) ZEROFILL.
Há alguma maneira de eu fazer isso no Hibernate Annotations? O que eu devo fazer, devo sobrescrever alguma configuração
da geração de Id? Se sim, qual configuração? Desde já agradeço.

6 Respostas

F

Estou curioso do pq disso.

Não basta implementar na camada view um render que preencha com zero?
Até pq se o ID for definido como long no hibernate… ai não dá… só se for string mesmo

L

cara... isso é java... seu id é um Long ou um Integer... ele não vai ter 00000000 na frente...

se vc quer isso vc pode fazer algo como

private static final String ZERO_FILL = "%013d";

@Transient
public String getIdZeroFill() {
    return getId() == null ? null : String.format(ZERO_FILL,getId());
}

sempre que quiser exibir o id com zero antes vc usar o getIdZeroFill() (ou da um nome mais bonito pra ele)

Ps.: não lembro bem se o formato da string ta 100%, mas acho que é assim mesmo "%013d", se não der certo avisa...
Ps2.: o @Transient é pra avisar ao hibernate que isso não se trata de um campo persistente que é apenas uma propriedade a mais da classe

O

É por causa da Legislação do Cupom Fiscal, mais especificamente o DAV. Segundo o Ato Cotepe 29-08:

É por isso :wink:

Bom, dah pra fazer isso no Hibernate Assim:

@Column(ColumnDefinition = "int(13) ZEROFILL")

Mas quando buscar isso no JAVA não vai rolar, porque até onde eu saiba, 0 a esquerda no JAVA não aparece, a não ser que seja mesmo String.

O

O problema nem era pegar Int ou Long com zero a esquerda, já imaginava isso. O negócio era o Hibernate Mesmo. Mas vcs jah me deram solução pra pegar o ID tbm. Vlw!!!

L

ColumnDefinition é uma propriedade que só é usada pra Eng. Reversa, ou seja… ela é usada quando o hibernate precisar realizar um CREATE TABLE ou ALTER TABLE, serve apenas pra construir as tabelas no banco, não muda nada quando a manipulação dos dados.

o que vc precisa fazer é converter para string, e usar formatado

O

Tranquilo, eu saquei isso. Mesmo assim, eu só queria saber como criar a Tabela dessa maneira. Vou usar String mesmo. Abrass.

Criado 9 de novembro de 2009
Ultima resposta 9 de nov. de 2009
Respostas 6
Participantes 3