Bom, infelizmente ele não faz.
O Oracle Database ainda não possui a propriedade de coluna "AUTO_INCREMENT" tal como do MySQL ou SERIAL do PostreSQL.
Uma opção seria fazer uso de triggers, para colocar o valor crescente nas tabelas de identificadores tal como exemplificado pelo Tim Hall em seu blog.
Mas e se o projeto já esta em andamento a alguns anos?
E se ele for construido em Java com uso de algum framework de persistência, tais como JPA e Hibernate (xodó dos programadores)?
Bom, depois de me debater durante umas 2 a 3 horas procurando por um parser de anotações Java/JPA especifico para sequences resolvi escrever meu próprio parser para tornar a minha vida mais fácil, e talvez a sua também.
O script "HbtParse_SeqToDB.pl" foi escrito em Perl e esta disponível no Google code, no projeto que criei recentemente chamado DB-Handy-Code.
Descrição: O script primeiramente se conecta ao banco de dados e cria no esquema do usuário fornecido uma tabela auxiliar chamada AUX_SEQUENCE_TAB_COL (caso ela não exista). Esta tabela possui 3 colunas (sequence_name, table_name e column_name) onde o nome da sequencia é uma chave primária e não pode ser repetida.
Após isto ela efetua uma varredura (do tipo 'find') de toda a árvore de diretórios a partir do <source directory> especificado buscando por arquivos ".java". Em cada arquivo ele efetua um parse por anotações específicas e caso cosiga efetuar a associação entre "Sequencia, Tabela e Coluna" ele insere esta associação na tabela auxiliar AUX_SEQUENCE_TAB_COL. Caso a sequence já exista na tabela auxiliar ele apenas imprime um "warning" na saída padrão, informando o nome do arquivo.
Após ter os dados das associações na tabela auxiliar é possível efetuar atividades de manutenção, tais como o reset dos valores das sequences para o valor máximo das colunas. Escrevi a algum tempo o código de uma stored procedure para tal, disponível aqui.
Limitações da versão 0.1a do HbtParse_SeqToDB.pl:
- Ela atualmente só reconhece anotações JPA em código fonte ".java", mas tenho intenção de extende-lo para elementos de XML no futuro
- É necessário que a anotação @Column esteja após a anotação @Id e antes da declaração do atributo/método da entidade, para que seja possível fazer a associação
- Atualmente só reconhece 1 sequence em cada arquivo fonte, e este arquivo pode conter apenas 1 entidade e 1 atributo identificador (o que não deixa de ser uma boa prática de programação Java)
- Atualmente suporta apenas banco de dados Oracle
- É necessário Perl v5.10 ou superior
- São necessários os seguintes módulos Perl
- File::Find::Rule
- Getopt::Long
- DBI
- DBD::Oracle
Como usar:
HbtParse_SeqToDB.pl -d <src dir> -B <src db> -U <db user> [-P <db pwd> -t <parser type> -h]
O script possui uma opção "-h" que exibe um help com a sintaxe.
Exemplo de uso:
[henchen@obelix ~]$ perl HbtParse_SeqToDB.pl -d /src-java -B dbi:Oracle://localhost:1521/ORCL -U scott -P tiger
Nenhum comentário:
Postar um comentário