Galera, aqui na empresa estamos modificando nosso projeto, e uma das modificações está relacionada a persistência dos dados. Estamos mudando de JDBC para Hibernate, mas estou com uma certa dificuldade na consulta.
Como eu posso passar essa Query de JDBC para Hibernate?
[code]
public List<HashMap<String, Object>> listar_dados(String UF) {
conectar();
String filtro = new String();
if (UF.equalsIgnoreCase("BR")) {
filtro = "";
} else if (UF.equalsIgnoreCase("CO")) {
filtro = " WHERE (UF ='GO' or UF ='DF' or UF ='MT' or UF ='MS')";
} else if (UF.equalsIgnoreCase("S")) {
filtro = " WHERE (UF ='RS' or UF ='SC' or UF ='PR')";
} else if (UF.equalsIgnoreCase("SD")) {
filtro = " WHERE (UF ='SP' or UF ='MG' or UF ='RJ' or UF ='ES')";
} else if (UF.equalsIgnoreCase("N")) {
filtro = " WHERE (UF ='AC' or UF ='AP' or UF ='AM' or UF ='PA' or UF ='RO' or UF ='RR' or UF ='TO')";
} else if (UF.equalsIgnoreCase("NE")) {
filtro = " WHERE (UF ='AL' or UF ='BA' or UF ='CE' or UF ='MA' or UF ='PB' or UF ='PE' or UF ='PI' or UF ='RN' or UF ='SE')";
} else {
filtro = " WHERE UF = '" + UF + "'";
}
List<HashMap<String, Object>> lista_dados = new ArrayList<HashMap<String, Object>>();
try {
statement = conexao
.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
resultset = statement.executeQuery("SELECT ordem, tipo, sum(`2011`) as a2011, "
+ "sum(`2012`) as a2012, sum(`2013`) as a2013, "
+ "sum(`2014`) as a2014, sum(`2015`) as a2015 FROM planoconveniencia"
+ filtro + " GROUP BY tipo ORDER BY ordem");
while (resultset.next()) {
HashMap<String, Object> hashmap_dados = new HashMap<String, Object>();
hashmap_dados.put("ordem", resultset.getString("ordem"));
hashmap_dados.put("tipo", resultset.getString("tipo"));
hashmap_dados.put("a2011", resultset.getDouble("a2011"));
hashmap_dados.put("a2012", resultset.getDouble("a2012"));
hashmap_dados.put("a2013", resultset.getDouble("a2013"));
hashmap_dados.put("a2014", resultset.getDouble("a2014"));
hashmap_dados.put("a2015", resultset.getDouble("a2015"));
lista_dados.add(hashmap_dados);
}
} catch (SQLException Banco) {
JOptionPane.showMessageDialog(null,
"Erro na manipulação de banco: " + Banco);
}
// JOptionPane.showMessageDialog(null, "Passou por aqui!");
desconectar();
return lista_dados;
}[/code]
public List<HashMap<String, Object>> listar_dados(String UF) {
conectar();
Criteria criteria = sessao.createCriteria(ClasseDaConsulta.class);
String filtro = new String();
if (UF.equalsIgnoreCase("BR")) {
//não adiciona nada
filtro = "";
} else if (UF.equalsIgnoreCase("CO")) {
//usando criteria fica mais fácil. Deve ficar algo assim (não estou certo, pois to sem tempo pra testar
criteria.add(Restrictions.in(UF, new String[]{"GO", "DF", "MT", "MS"});
//filtro = " WHERE (UF ='GO' or UF ='DF' or UF ='MT' or UF ='MS')";
} else if (UF.equalsIgnoreCase("S")) {
filtro = " WHERE (UF ='RS' or UF ='SC' or UF ='PR')";
} else if (UF.equalsIgnoreCase("SD")) {
filtro = " WHERE (UF ='SP' or UF ='MG' or UF ='RJ' or UF ='ES')";
} else if (UF.equalsIgnoreCase("N")) {
filtro = " WHERE (UF ='AC' or UF ='AP' or UF ='AM' or UF ='PA' or UF ='RO' or UF ='RR' or UF ='TO')";
} else if (UF.equalsIgnoreCase("NE")) {
filtro = " WHERE (UF ='AL' or UF ='BA' or UF ='CE' or UF ='MA' or UF ='PB' or UF ='PE' or UF ='PI' or UF ='RN' or UF ='SE')";
} else {
filtro = " WHERE UF = '" + UF + "'";
}
List<HashMap<String, Object>> lista_dados = new ArrayList<HashMap<String, Object>>();
try {
//ao invés de tudo isto, bastaria
return criteria.list();
statement = conexao
.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
resultset = statement.executeQuery("SELECT ordem, tipo, sum(`2011`) as a2011, "
+ "sum(`2012`) as a2012, sum(`2013`) as a2013, "
+ "sum(`2014`) as a2014, sum(`2015`) as a2015 FROM planoconveniencia"
+ filtro + " GROUP BY tipo ORDER BY ordem");
while (resultset.next()) {
HashMap<String, Object> hashmap_dados = new HashMap<String, Object>();
hashmap_dados.put("ordem", resultset.getString("ordem"));
hashmap_dados.put("tipo", resultset.getString("tipo"));
hashmap_dados.put("a2011", resultset.getDouble("a2011"));
hashmap_dados.put("a2012", resultset.getDouble("a2012"));
hashmap_dados.put("a2013", resultset.getDouble("a2013"));
hashmap_dados.put("a2014", resultset.getDouble("a2014"));
hashmap_dados.put("a2015", resultset.getDouble("a2015"));
lista_dados.add(hashmap_dados);
}
} catch (SQLException Banco) {
JOptionPane.showMessageDialog(null,
"Erro na manipulação de banco: " + Banco);
}
// JOptionPane.showMessageDialog(null, "Passou por aqui!");
desconectar();
return lista_dados;
}
Deve ficar assim, como disse, não posso testar agora.
[quote=Firej]Opa, brigadão cara, vou testar aqui.
Aproveitando o embalo, no caso dessa consulta aqui, bastaria utilizar criteria igual no código de cima?
[code]public List listar_tipologia() {
conectar();
List lista_dados = new ArrayList();
DateFormat formataData = new SimpleDateFormat("dd/MMM/yyyy");
try {
statement = conexao
.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
resultset = statement.executeQuery(" SELECT inauguracao.tipologia, Count(inauguracao.nome) AS qtd FROM inauguracao WHERE " +
"inauguracao.tipologia <> ' ' AND inauguracao.dia >= '2011-01-01' AND inauguracao.dia <= now() GROUP BY " +
"inauguracao.tipologia ORDER BY qtd DESC");
while (resultset.next()) {
HashMap hashmap_dados = new HashMap();
//String dia = formataData.format(resultset.getDate("dia"));
hashmap_dados.put("tipologia", resultset.getString("tipologia"));
hashmap_dados.put("qtd", resultset.getString("qtd"));
lista_dados.add(hashmap_dados);
}
} catch (SQLException Banco) {
JOptionPane.showMessageDialog(null,
"Erro na manipulação de banco: " + Banco);
}
desconectar();
return lista_dados;
}[/code][/quote]
Cada caso é um caso.
Naquele eu citei pela forma como estava.
Neste você terá que adaptar muitas coisas.
Talvez HQL seja mais simples…