[Resolvido] Resultado de consulta createSQLQuery

1 resposta
W

Pessoal,
Supondo que tenho as tabelas no DB;

Tabela1 {
     IDTab1,
     Nome
}

Tabela2{
     IDTab2,
     NomeCompleto
}

Se em uma consulta eu possuir o seguinte código SQL:

SELECT IDTab1,
            Nome,
            NomeCompleto
   FROM Tabela1, Tabela2
 WHERE Tabela1.NomeCompleto like '%'||Tabela2.Nome||'%'
Se eu possuir
@Entity
...
public class Tabela1{
    @Id
    @Column(name = "idtab1")
    private Integer IDTab1;

    @Column(name = "nome")
    private String nome;

    //Preencher este atributo com resultado da consulta
    @Transient
    private nomeCompleto;
....
}
Tentei assim:
String strSQL = "SELECT IDTab1, Nome, NomeCompleto FROM Tabela1, Tabela2 WHERE Tabela1.NomeCompleto like '%'||Tabela2.Nome||'%'";

SQLQuery query = (SQLQuery) this.getSession().createSQLQuery(strSQL).addEntity(Tabela1.class);
List<Tabela1> listResult = query.list();

1. As tabelas não possuem integridade referencial;
2. Se eu adicionar o atributo nomeCompleto na entity de mapeamento da Tabela1, ele interpretará que este atributo existe na base de dados;
3. Me sugeriram adicionar o atributo "nomeCompleto" como @Transient, mas mesmo assim, ele não é preenchido com o query.list();
4. Como forma alternativa, pensei em não utilizar o addEntity(Tabela1.class) e trabalhar com Object[], porém, antes de iniciar essa abordagem, queria saber se há uma forma mais "simples" de trabalhar.

Há como eu fazer com que o resultado da consulta me retorne instancia da classe Tabela1 + o atributo "nomeCompleto" preenchido?

Obs: Utilizei nomes hipotéticos, pois, ainda estou fazendo testes antes de iniciar a implementação.

1 Resposta

W

Pessoal,
Não precisa mais, já descobri.
Para deixar registrado aqui, o que fiz foi o seguinte:

=========== Código ===============
String strSQL = “SELECT IDTab1, Nome, IdTab2, NomeCompleto FROM Tabela1, Tabela2 WHERE Tabela1.NomeCompleto like ‘%’||Tabela2.Nome||’%’”;

SQLQuery query = (SQLQuery) this.getSession().createSQLQuery(strSQL).addEntity(Tabela1.class).addEntity(Tabela2.class);

//Este List retorna um Object[], sendo que o primeiro elemento é o Tabela1 e o segundo elemento é o Tabela2.
List listResult = query.list();

================================

[]'s

Criado 31 de dezembro de 2010
Ultima resposta 31 de dez. de 2010
Respostas 1
Participantes 1