Dúvida sobre Criteria
29/11/2018 16:48
Pessoal,
Possuo duas classes de domínio (especificadas abaixo) e preciso verificar/listar quais "Contribuintes" que não possuem vinculação com "Cnes". Diretamente no banco de dados (MySQL), consegui o resultado esperado com o seguinte comando:
SELECT *
FROM contribuinte
INNER JOIN cnes
ON [url=http://contribuinte.id/]contribuinte.id[/url] != cnes.fk_contribuinte_id
Como "transcrever" isso em Criteria?
Contribuinte.groovy
package sis
import es.TipoLogradouro
import java.util.Date;
class Contribuinte {
String tipo
String numInscricao
String nomeEmpresarial
String nomeFantasia
TipoLogradouro fkTipoLogradEndereco
String logradEndereco
int numEndereco
String complEndereco
String bairroEndereco
String telefone
Date dtExpedAlvara
Date dtValidAlvara
boolean ativo
static constraints = {
tipo inList:["Pessoa Fisica","Pessoa Juridica"]
numInscricao unique:true
nomeFantasia nullable:true
complEndereco nullable:true
dtExpedAlvara nullable:true
}
}
Cnes.groovy
package sis
import es.TipoEstabSaude
import sis.Contribuinte
class Cnes {
Contribuinte fkContribuinte
TipoEstabSaude fkTipoEstabSaude
String numCnes
static constraints = {
numCnes unique:true
}
}
Tags:
Grails, Criteria, Inner Join
Bom pelo o que eu entendi vc quer trazer o Contribuinte que nao esteja listado nos Cnes ?
Se for isso caso vc tenha referenciado uma lista dentro do Contribuinte poderia fazer com uma simples consulta
Contribuinte .findAllByIdAndCnesListIsNull(idContribuinte)
Acredito que vc consiga fazer isso sem a necessidade da criteria.
Outra informacao e que vc nao referenciou o Cnes dentro do Contribuinte
Agora caso queira fazer criteria vc pode fazer assim
def c= Cnes .createCriteria()
def results = c.list{
?notEq('fkContribuinte.id', id)
}
Esse resultado te trara uma lista de CNES ou apenas um.
Basta percorrer e retornar o Contribuinte
Ainda não faz parte da comunidade???
Para se registrar, clique aqui.