Como acessar atributo de atributo de atributo... sem configuração no mapping
17/07/2013 00:03
0
Ola Pessoal,

estou com um problema, possui uma classe (Sala) que possui outras classes tabeladas vinculadas a esta classe(Cadeira). Quando executo minhas regras de negócio dentro de um Service e mando verificar um atributo de B (Sala.cadeira.marca == "CADEIRAGRANDE") ele retorna nulo mesmo o aluno estando lá.

No Debug que fiz vi que o campo apesar de estar informando a vinculação correta de 'cadeira' na 'sala' vi que o registro vinculado esta com todos os campos nulos, porém todos estão completamente preenchidos no Banco de Dados.

O que percebi é que quando, em um serviço, eu invoco um atributo de outro atributo (de um atributo), o GORM não carrega todos os registros consigo, por questão de controle de cache.

Porém não preciso que todos os momentos o mesmo seja carregado, apenas durante esta execução por isso não coloquei a opção 'lazy: false' em meu 'mapping' de domínio.

Gostaria de saber se alguém sabe como posso fazer que somente naquele momento da regra de negócio eu consiga acessar o atributo de meu atributo (de meu atributo) em meu service?
Tags: lazy, mapping, service


0
Dá pra postar o código das classes envolvidas?


0
Olha, pelo pouco que eu sei de Hibernate, eu acho que ao acessar o seu atributo ele deveria ser carregado automaticamente.
Pode ser algum problema com a sua classe.
Mostre o código.

Abraço.
19/07/2013 23:24


0
Ola Pessoal,

desculpe o atraso em responder.

Minha classe é basicamente esta:

Class Marca{
...
String nome
...
}


Class TipoBemPermanente{
...
String nome
Marca marca
...
}


Class BemPermanente{
...
String codigo
String nome
TipoBemPermanente tipo
...
}


Class Controle{
...
String nome
BemPermanente patrimonio
...
}


Basicamente estas são as classes. O 'static mappings' de todos estão vazios e eu não coloquei nenhuma opção no dominio como 'Lazy:false' para controlar o cache.

Agora, quando trabalho com minhas regras de negócio e passo uma instancia de 'Controle' por parâmetro para um serviço não dá nenhum problema.

Porém quando, dentro deste serviço eu invoco outro serviço (subserviço) e passo a mesma variável 'Controle' como parâmetro os atributos como 'patrimonio' é apenas referenciado e se neste "subserviço" eu mandar verificar se 'tipo?.marca?.nome == 'QUALQUER COISA' ' retorna 'false' não porque inexiste o tipo, mas porque não consegue invocar os atributos da variável, apenas sua referências.

Diante deste problema, se eu colocar no 'static mappings' do dominio a opção 'patrimonio lazy:false' e fazer isso para os registros dependentes o resultado é retornado corretamente.

O problema é que se eu coloco esta opção em todos os domínios acho que o desempenho da aplicação poderá ser prejudicado pela questão do controle de cache.

Alguém tem alguma sugestão.

22/07/2013 14:48



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