1
resposta

Como inserir uma lista de objetos usando sql nativo

Opa, pessoal. Seguinte, estou tendo que fazer uma consulta nativa. Mais ou menos dessa forma.

Objeto 1
string a;
string b;
List<Objeto2> objetos;

Mas, ao fazer nativo, a lista objetos, ela vem um valor por linha. Usando com JPA, ele já faz vir preenchido dentro do objeto1. A dúvida é como fazer a consulta nativa e trazer essa lista dentro do objeto 1.

1 resposta

Olá Kayo,

Entendi sua dúvida. Você pode usar a função GROUP_CONCAT do MySQL para concatenar os valores da lista em uma única string separada por um caractere específico (por exemplo, ';'). Em seguida, você pode separar essa string em uma lista de objetos no seu código Java.

A consulta SQL ficaria mais ou menos assim:

SELECT o1.a, o1.b, GROUP_CONCAT(CONCAT(o2.c, ';', o2.d)) as objetos
FROM objeto1 o1
JOIN objeto2 o2 ON o1.id = o2.objeto1_id
GROUP BY o1.id

No código Java, você pode usar o método split() da classe String para separar a string em uma lista de objetos2. Algo assim:

List<Objeto1> resultado = entityManager.createNativeQuery(sql, "Objeto1ComObjetos2Mapping").getResultList();
for (Objeto1 o : resultado) {
    List<Objeto2> objetos2 = new ArrayList<>();
    String[] objetos2String = o.getObjetos().split(";");
    for (String objeto2String : objetos2String) {
        String[] campos = objeto2String.split(",");
        objetos2.add(new Objeto2(campos[0], campos[1]));
    }
    o.setObjetos2(objetos2);
}

Espero ter ajudado e bons estudos!