Skip to content

Instantly share code, notes, and snippets.

@kauanmocelin
Last active April 6, 2021 12:16
Show Gist options
  • Save kauanmocelin/33cb87ac7c7c2205e795df1de6b37a40 to your computer and use it in GitHub Desktop.
Save kauanmocelin/33cb87ac7c7c2205e795df1de6b37a40 to your computer and use it in GitHub Desktop.
[Obter listas manualmente com SELECT NEW] #hibernate
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