Last active
April 6, 2021 12:16
-
-
Save kauanmocelin/33cb87ac7c7c2205e795df1de6b37a40 to your computer and use it in GitHub Desktop.
[Obter listas manualmente com SELECT NEW] #hibernate
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Obter um objeto pelo hibernate que possua somente alguns atributos e que possua listas usando o SELECT new objeto() | |
1 - Obter o objeto usando o new do hibernate selecionando os campos necessários; | |
2 - Fazer uma query separada para obter as listas e setar no objeto. | |
public List<Modelo> listarPorParametro(String nomeModelo, Integer codigoTipoModelo, Integer codigoEspecie, String codigoLocal, Integer codigoSituacao) throws ApplicationException { | |
try { | |
Session session = HibernateUtil.currentSession(); | |
StringBuffer sql = new StringBuffer(); | |
sql.append("SELECT new Modelo(modelo.codModelo, modelo.nome, modelo.situacao) "); | |
sql.append("FROM Modelo modelo "); | |
sql.append("WHERE 1 = 1 "); | |
if(StringUtils.isNotBlank(nomeModelo)) { | |
sql.append("AND UPPER(modelo.nome) like :nomeModelo "); | |
} | |
if(codigoTipoModelo != null) { | |
sql.append("AND modeloEspecieTipo.tipoModelo = :codigoTipoModelo "); | |
} | |
if(codigoEspecie != null) { | |
sql.append("AND modeloEspecieTipo.codEspecie = :codigoEspecie "); | |
} | |
if(StringUtils.isNotBlank(codigoLocal)) { | |
sql.append("AND modeloLocal.codLocal = :codigoLocal "); | |
} | |
if(codigoSituacao != null) { | |
sql.append("AND modelo.situacao = :codigoSituacao "); | |
} | |
sql.append("ORDER BY modelo.nome "); | |
Query query = session.createQuery(sql.toString()); | |
if(StringUtils.isNotBlank(nomeModelo)) { | |
query.setString("nomeModelo", "%".concat(nomeModelo.toUpperCase()).concat("%")); | |
} | |
if(codigoTipoModelo != null) { | |
query.setInteger("codigoTipoModelo", codigoTipoModelo); | |
} | |
if(codigoEspecie != null) { | |
query.setInteger("codigoEspecie", codigoEspecie); | |
} | |
if(StringUtils.isNotBlank(codigoLocal)) { | |
query.setString("codigoLocal", codigoLocal); | |
} | |
if(codigoSituacao != null) { | |
query.setInteger("codigoSituacao", codigoSituacao); | |
} | |
List<Modelo> listaModelo = (List<Modelo>)query.list(); | |
for (Modelo modelo : listaModelo) { | |
// Carrega lista ModeloEspecieTipo no Modelo | |
Query queryModeloEspecieTipo = session.createQuery("FROM ModeloEspecieTipo modeloEspecieTipo WHERE modeloEspecieTipo.modelo.codModelo = :codModelo "); | |
queryModeloEspecieTipo.setInteger("codModelo", modelo.getCodModelo()); | |
List<ModeloEspecieTipo> listaModeloEspecieTipo = (List<ModeloEspecieTipo>)queryModeloEspecieTipo.list(); | |
modelo.setListaModeloEspecieTipo(listaModeloEspecieTipo); | |
// Carrega lista ModeloLocal no Modelo | |
Query queryModeloLocal = session.createQuery("FROM ModeloLocal modeloLocal WHERE modeloLocal.modelo.codModelo = :codModelo "); | |
queryModeloLocal.setInteger("codModelo", modelo.getCodModelo()); | |
List<ModeloLocal> listaModeloLocal = (List<ModeloLocal>)queryModeloLocal.list(); | |
modelo.setListaModeloLocal(listaModeloLocal); | |
} | |
return listaModelo; | |
} catch (Exception e) { | |
logDAO.error(Util.logarErro(e)); | |
throw new ApplicationException("mensagem.erro.9001", new String[] { "ModeloHibernateDAO.listarPorParametro()" }, e, ApplicationException.ICON_ERRO); | |
} finally { | |
try { | |
HibernateUtil.closeSession(); | |
} catch (Exception e) { | |
logDAO.error(Util.logarErro(e)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment