Problema para acessar valores de tabelas relacionadas em banco [NxN]
29/05/2013 19:32
0
Estou com o seguinte problema:

Tenho três tabelas:

Tabela 1) Regra [id_regra, codigoRegra]
Tabela 2) Modo [id_modo, codigoModo]
Tabela 3) RegraModo [id_regra, id_modo] <- Chave estrangeira e primaria em ambas. [NxN]

O que não estou conseguindo fazer seria obter por exemplo, através de uma regra, todos os modos associadas a elas.

Meus mapeamentos:
-----------------------------------------------------------------------------------
public class RegraTradu implements Serializable{

String cdRegraTradu

SortedSet mdComando

static hasMany = [mdComando:RegraTraduModoComando]

static constraints = {
cdRegraTradu(blank:false, unique:true)
}

static mapping = {
table '###########'
//id(generator:'increment')
id(generator:'sequence',params:[sequence:'#########'])

mdComando cascade:"all,delete-orphan"
mdComando lazy:true
servicRede lazy:true

columns{
id(column:'########')
cdRegraTradu(column:'######')
version(column:'#########')
}
}

String toString(){
return cdRegraTradu
}

public boolean equals(Object obj) {
RegraTradu regraTradu = (RegraTradu) obj;

return (this.cdRegraTradu.equals(regraTradu.cdRegraTradu))
}

public int hashCode() {
return this.cdRegraTradu.hashCode();
}
}
-----------------------------------------------------------------------------------
public class ModoComando implements Serializable{

String dsMdComando

static belongsTo = RegraTraduModoComando

static hasMany = [regraTrad:RegraTraduModoComando]

static constraints = {
dsMdComando(nullable:false, blank:false)
}

static mapping ={
table '#####################'

regraTrad lazy:true

//id(generator:'increment')
id(generator:'sequence',params:[sequence:'##################'])

columns{
id(column:'id_modo_comando')
dsMdComando(column:'ds_modo_comando')
version(column:'nu_versao_obj')
}
}

String toString(){
return dsMdComando
}

public boolean equals(Object obj) {
ModoComando modoComando = (ModoComando) obj;

return (this.dsMdComando.equals(modoComando.dsMdComando))
}
}
-----------------------------------------------------------------------------------
public class RegraTraduModoComando implements Serializable, Comparable {

RegraTradu regraTrad;
ModoComando mdComando;

static belongsTo = RegraTradu, ModoComando;

static mapping = {
table '#######################'
id composite:['regraTrad', 'mdComando']
columns {
id composite:['regraTrad', 'mdComando']
regraTrad(column:'id_regra_tradu')
mdComando(column:'id_modo_comando')
}
}

int compareTo(obj) {
if(regraTrad != null && obj.regraTrad != null && mdComando != null && obj.mdComando != null) {
return (regraTrad.compareTo(obj.regraTrad) && mdComando.compareTo(obj.mdComando))
}
return 1;
}
}

-----------------------------------------------------------------
Desculpem pela duvida simples, estou começando a trabalhar com o Grails por agora.
Tags: BD, banco, mapeamento, nxn, relacionamento, acesso


1
Fala Brother poderia por exemplo fazer:

//regra no caso é uma instância de Regra
List<Modo> modos = RegraModo.findAllByRegra(regra)


ou


//Aqui faz a busca utilizando criteria, retorna Modo cujo o id da Regra seja o que vc passar
List<Modo> modos = RegraModo.createCriteria {
projections {
property('modo')
}

regra {
eq('id', id_da_regra)
}
}


Vc pode usar tb

RegraModo.executeQuery("select rm.modo_id from RegraModo rm where rm.regra_id = ?", [1])


ou então

import groovy.sql.Sql

def dataSource

String query = "select {campos_da_tabela_modo} from regra_modo inner join modo m on m.id = rm.modo_id where mr.regra_id = ${id_da_regra_que_vc_quer_pesquisar}"

Sql sql = new Sql(dataSource)

sql.rows(query)


Brother não testei mas acredito que funciona! Espero ter ajudado! :)



0
Cara, muito obrigado pela ajuda, cheguei a tentar alguns deles mas não estava resolvendo.

Consegui resolver meu problema e vou registrar aqui a nível de histórico mesmo para os que tiverem o mesmo problema no futuro.

Eu estava usando SortedSet em meu primeiro mapeamento, mas sem implementar a interface Comparable no objeto em questão, logo o Grails não conseguia fazer a ordenação necessário de minha lista.

Bastou implementar a mesma (ou remover o SortedSet, testei ambas) e tudo funcionou perfeitamente.

De qualquer forma, obrigado!
06/06/2013 15:05



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