Um-para-um unidireccional
19/09/2010 00:00
0
Tenho problemas com a relação um-para-um unidireccional. Tenho as classes Pessoa, Sócio e Utente:


class Pessoa implements Comparable{
//code here

static mapping = {

socio cascade: "all-delete-orphan"
utente cascade: "all-delete-orphan"
}
}
class Socio implements Comparable{
Pessoa pessoa

static mapping = {
utente cascade: "all-delete-orphan"
}

static belongsTo = Pessoa
}

class Utente implements Comparable{

Socio socio
//code here

static belongsTo = Socio
}

É uma relação unidireccional porque existem diversos tipos de pessoas. Existem pessoas que são funcionários , sócios, etc. Um sócio é uma pessoa mas uma pessoa pode ser ou não ser um sócio. Quando uma pessoa é apagada era de esperar que essa pessoa desaparecesse da tabela dos sócios e dos utentes. Mas em vez de isso acontecer quando se tenta aceder à lista dos sócios aparece a mensagem:


Error 500: Error evaluating expression [fieldValue(bean: socioInstance, field: "pessoa")] on line [45]: No row with the given identifier exists: [ipss.Pessoa#1]
Servlet: grails
URI: /ipss/grails/socio/list.dispatch
Exception Message: No row with the given identifier exists: [ipss.Pessoa#1]
Caused by: Error evaluating expression [fieldValue(bean: socioInstance, field: "pessoa")] on line [45]: No row with the given identifier exists: [ipss.Pessoa#1]
Class: C:/centro_de_Dia_2/20100916/ipss/grails-app/views/socio/list.gsp
At Line: [45]


Não deveria o belongsTo resolver este problema? Se não é suficiente para resolver este problema então o que falta?
Tags: Tópicos avançados


0
Neste caso, existe uma tabela de relacionamento, e está relacionando um registro com outro.

por exemplo A -> B.

Só que na tabela do B, ele foi removido.

Para resolver, basta remover na mão o registro, e para que não aconteca mais, de uma olhada aqui e aqui (para gerenciar os relaciomamentos das classes):

<!-- m --><a class="postlink" href="http://grails.org/doc/latest/ref/Domain%20Classes/addTo.html">http://grails.org/doc/latest/ref/Domain ... addTo.html</a><!-- m -->

<!-- m --><a class="postlink" href="http://grails.org/doc/latest/ref/Domain%20Classes/removeFrom.html">http://grails.org/doc/latest/ref/Domain ... eFrom.html</a><!-- m -->
20/09/2010 00:00


0
Peço desculpa mas não percebi o seguinte:

Neste caso, existe uma tabela de relacionamento, e está relacionando um registro com outro.


Não existe uma tabela de relacionamento porque o relacionamento que existe entre as tabelas é um relacionamento de um-para-um e não de um-para-muitos ou de muitos-para-muitos.

Para resolver, basta remover na mão o registro,(...)


Como eu faço isso?

http://grails.org/doc/latest/ref/Domain ... addTo.html


Este exemplo é para relações de um-para-muitos e muitos-para-muitos. Penso que não se aplica a este caso.
Não existe maneira de eu resolver este problema?
20/09/2010 00:00


0
Entendo.

Como disse, uma entidade (A) está gravada com o id (1) da entidade (B) em seu relacionamento.
Porém na tabela (B) não existe mais o registro com id (1).

o que esta entre (.) são os exemplos.

Pelo que vi no teu erro, é o registro id=1 da classe=Pessoa

Neste caso, limpe o registro no banco mesmo, e no código para evitar que aconteça, sempre limpe a relação quando excluir o registro.
27/09/2010 00:00


0
Já resolvi o problema. Tive que tornar a relação bidireccional e depois seguir o exemplo o conselho de

<!-- m --><a class="postlink" href="http://jira.codehaus.org/browse/GRAILS-5581">http://jira.codehaus.org/browse/GRAILS-5581</a><!-- m -->

Simplesmente não estão previstas as relações unidireccionais.
29/09/2010 00:00



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