Como recuperar o nome de uma coluna no banco de dados?
07/07/2015 12:15
0
Caríssimos membros.

Como recuperar o nome da coluna correspondente a um domainClass como está no banco de dados.

Por exemplo: dataNacimento === retornar data_nascimento

Importante: estou no contexto estático dos scaffoldings

Obrigado!
Tags: domainClass;nome da coluna;banco de dados;scaffolding


1
Pedro,
  Deve ter uma maneira mais elegante, mas o código abaixo funciona:
String aString = "dataNacimento" 
?String aux = ""
aString.collect{aux += Character.isUpperCase(it as Character)? "_"+Character.toLowerCase(it as Character): it}
return aux
07/07/2015 15:01


0
Obrigado Dyego...

Estava pensando em partir para a recuperação do metadata, ou algo por aí?

Teria alguma ideia?

Obrigado
07/07/2015 16:58


0
Como sugerí não resolve?
07/07/2015 17:14


0
Olá Dyego.

Sim resolve este problema espefífico quando o nome da coluna na base de dados está utilizando caractere de undersore (data_nascimento) e o aplicativo minúsculas e maíusculas (dataNascimento). Porém este não é o  único caso. 

Eu pretendo conseguir acessar o metaData de uma determinada propriedade através de SectionFactory do Hibernate para lograr sucesso, porém ainda não o consegui devido ao contexto em que estou ser estático: a aplicação ainda não está rodando, estou no scaffolding para a construção das páginas gsp.

Obrigado!
08/07/2015 09:03


1
Ok Pedro,
  Que tal isso: http://stackoverflow.com/questions/7664845/how-to-get-the-name-of-the-table-gorm-object-is-mapped-to
  Por curiosidade, você precisa mesmo deste nome das tabelas no scaffolding?  Poderia compartilhar esta motivação?
08/07/2015 15:36


0
Olá Dyego.

Obrigado por seu interesse. Já tentei diversas abordagens sugeridas nos sites de apoio, mas não consegui sucesso ainda...

Minha motivação é gerar "telas" de consultas para meus domínios de forma automática. Com a ajuda do scafoldding estou conseguindo fazer isso apenas parametrizando uma classe de serviço de exibição para cada domínio - e então tudo funciona magicamente. Estou fascinado com o poder do scafoldding! Demorou para formar uma compreensão, mas já saí da fase de engatinhar.

Você vai enteder a situação olhando este código:

Domínio

class PessoaFisica {

LocalDate dataNascimento
String sexo
String cpf

...
?
Controller

?...
            def lsSql = ""
            if (params.dataNascimento_year)   {
                lsSql = "TO_CHAR (data_nascimento, 'YYYY') = " + params.dataNascimento_year
                // "YEAR(data_nascimento) = " + params.dataNascimento_year
                sqlRestriction lsSql
            }
            if (params.dataNascimento_month)  {
                lsSql = "TO_CHAR (data_nascimento, 'MM') = " + params.dataNascimento_month
                println(lsSql)
                sqlRestriction lsSql
            }
            if (params.dataNascimento_day)    {
                lsSql = "DAY(data_nascimento) = " + params.dataNascimento_day
                sqlRestriction lsSql
            }
...

Tudo está funcionando - este trecho de código é montado automaticamente, porém "data_nascimento" tive que colocar na mão, pois não consigo retornar o nome do campo dataNascimento na base de dados.

Obrigado!

 
11/07/2015 14:31


1
Certo Pedro,
  Não seria mais simples usar o "findBy" ou "criteria" do grails?
Assim fica irrelevante o nome da tabela no BD, basta o nome da classe e dos atributos a serem buscados.

De qualquer maneira, bom saber que conseguiu evoluir com a solução.
14/07/2015 15:55


0
Olá Dyego,

Talvez sim... Sabe me dizer se consigo com Findders e Criteria fazer a pesquisa da data pelas partes - ano, mes, dia?

Abraço!
14/07/2015 19:13


0
É simples Pedro, basta você criar um "Date" com as partes da data que você tem e usar este "Date" como parâmetro da busca, ex:
?PessoaFisica.findByDataNascimento(myDate) 
15/07/2015 16:37



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