Base de Dados Legada sem ID
24/01/2011 00:00
0
Bom dia Pessoal,

Seguinte, estou iniciando um trabalho na qual tenho uma base legada em MS Access e porém, existem algumas tabelas sem chave primária, ou seja, sem a columa "id".
Então vem a pergunta, como faço para dizer para o GORM para ele ignorar essa coluna?

Já tentei utilizar "static transients" e não funcionou.
Tags: Grails


0
Neste caso, cabem algumas perguntas:

1. Não tem nenhum campo nestas tabelas que identifiquem unicamente cada registro? Neste caso, tratam-se de tabelas que, por exemplo, simplesmente armazenam resultados de relatórios ou filhos que podem ter características identicas?

Se existir um campo chave, e este não se chamar id, é fácil de resolver, basta mapear o nome do campo, tal como neste exemplo:


class Dummy {
static mapping = {
id column:"coisas_da_vida"
}
}


Você pode inclusive alterar o tipo do campo se quiser, por exemplo, trabalhar com strings ou datas, ou qualquer outro formato.

Agora, mapear uma classe de domínio sem chave primária vai te causar alguns problemas, pois no caso do GORM, você está lidando diretamente com algumas convenções, dentre as quais, a presença obrigatória de chave primária.

O GORM injeta métodos como get, por exemplo, nas suas classes de domínio, estes de cara não funcionariam.

Aproveitando, outra dúvida: como você está fazendo para acessar a base Access com o Grails? Está usando algum dialeto especial? Seu sistema será executado apenas na plataforma Windows?


0
Poisé, é uma base em MS Access na qual não teve uma modelagem adequada.
A maioria das tabelas não tem nenhuma chave primária e nenhum relacionamento ( é um BANDO DE DADOS mesmo <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: --> )

Para acesso ao MS Access encontrei um Dialect implementado na qual não me deu nenhum problema por enquanto, visto que estou no inicio rsrs.

O Dialect se encontra em http&#58;//code.google.com/p/mesh4x/source/browse/Mesh4j/trunk/Mesh4j/src/org/mesh4j/sync/adapters/hibernate/msaccess/MsAccessDialect.java?r=1997

Até consegui contornar para funcionar a Action List, porém na hora de salvar ele gera o erro

java.sql.SQLException&#58; [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na instrução INSERT INTO.
...


O engraçado que olhando sql que o hibernate gera esta correto


INSERT INTO ENUMERATORS (enumerates, value, name) values (?, ? ,?)


A tabela é a seguinte :

Tabela:
Enumerators

Campos :
Name - VARCHAR
Enumerates - INTEGER
Value - INTEGER

mapei meu Domain assim:


class Enumerators{
String name
Integer enumerates
Integer value

static mapping = {
id generator&#58; &quot;assigned&quot;, name&#58; &quot;name&quot;, type&#58; &quot;text&quot;
version false
}
}


0
Estava esquecendo o complemento:

Aproveitando, outra dúvida: como você está fazendo para acessar a base Access com o Grails? Está usando algum dialeto especial? Seu sistema será executado apenas na plataforma Windows?


Para acessar a base com o Grails compilei o Dialect citado acima e coloquei na pasta src/java e alterei o DataSource.groovy adicionando a propriedade dialect apontando para o mesmo.

O sistema será executado na plataforma Windows mesmo.
Achei a biblioteca [url]http://jackcess.sourceforge.net/[url] para trabalhar como se fosse um driver embarcado independente da plataforma, realizei alguns testei e gostei, porém não consegui executar SQL da forma tradicional apenas utilizando a API.

Abraços



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto