Bom dia!
Vai mais uma dúvida.
Uso no meu projeto JPA 1.0.
Por algumas limitações dele, estou fazendo alguns métodos para busca de acordo com um objeto de exemplo. Imagino que isso o Hibernate faça.
Pois bem, quando eu executo o método createQuery().
O método que chamo é o lista(T t). O retorno é null, de nenhum dado encontrado.
Se eu executo a query que o JPA me mostra ( devido a configuração "
public List<T> lista(String where, LinkedList<Object> params)
{
String[] aux = where.replace("?", "§").split("§");
String w = aux[0];
for (int i = 1 ; i < aux.length ; i ++)
{
w += " :param" + String.valueOf(i) + " " + aux[i];
}
Query q = this.em.createQuery(w);
for (int i = 0 ; i < params.size() ; i ++)
{
System.out.println("param"+String.valueOf(i+1)+" = " + params.get(i));
q.setParameter("param" + String.valueOf(i+1), params.get(i));
}
return (List<T>) q.getResultList();
}
@Override
public List<T> lista (T t){
AuxJpa<T> aux = new AuxJpa<T>();
String comando = aux.getWhere(t);
return lista("from " + classe.getName() + " t " + (!comando.isEmpty()?"where ": "") + comando,aux.getParams());
}
class AuxJpa<T>{
private LinkedList<Object> params = new LinkedList<Object>();
public LinkedList<Object> getParams()
{
return this.params;
}
public String getWhere(T t)
{
String ret = "";
Method[] metodos = t.getClass().getDeclaredMethods();
for (Method m : metodos)
{
if (m.getName().startsWith("get") || m.getName().startsWith("is"))
{
ret += getValor(m,t) + (getValor(m,t).equals("") ?"":" AND ");
continue;
}
}
return ret.substring(0,ret.length()-4);
}
private String getValor(Method m, T t)
{
String ret = "";
try
{
if (m.invoke(t, null)==null) return ret;
if (params.isEmpty() || !params.get(params.size()-1).equals(m.invoke(t, null)))
{
params.add(m.invoke(t, null));
}
for (Field f : t.getClass().getDeclaredFields())
{
if (m.getName().substring(m.getName().startsWith("get")?3:2).toLowerCase().equals(f.getName().toLowerCase()))
{
ret = f.getName() + " = ? ";
continue;
}
}
}
catch (IllegalAccessException ex)
{
System.out.println(ex.getMessage());
}
catch (IllegalArgumentException ex)
{
System.out.println(ex.getMessage());
}
catch (InvocationTargetException ex)
{
System.out.println(ex.getMessage());
}
return ret;
}
}