JPA..duvida em montar JPQL entre objetos

duvida como montar o JPQL onde possa aparecer o codigo do modelo e o nome do modelo conforme tela abaixo
pois tenho que voltar uma lista faz não sei como fazer o relacionamento entre os objetos se alguém puder me ajudar …
tentei fazer o sql abaixo mas o modelo não está dentro do objeto estoque_item por isso não sei fazer esse relacionamento
teria que fazer com dispositivo.

se alguém puder me ajudar …

abs


tela jsp

codigo item      numero_serie     id modelo nome modelo
=========     ==========    =======  ==========



  StringBuffer jhl = new StringBuffer();
  jhl.append("SELECT estoque_item ,modelo   FROM estouqe_item item , modelo modelo where ");
  List  itens = em.getManager().createQuery(jhl.toString()).getResultList();

estoque_item
==========
# id
* nome_item
* id_dispositivo

-----------------
dispositivo
========
# id
* nome_dispositivo
* numero_serie
* id_modelo

modelo
=====
# id
* nome_modelo


É uma query ou native query?

estou tentando gerar uma lista podendo ser List ou Object de varias linhas que virá do banco de dados
minha duvida é como montar essa query no jpa com hibernate …

Usando uma query: FROM estouque_item item , modelo modelo where item.id = modelo.id

olá,

minha duvida é o seguinte como montar e depois ler por exemplo pois vou retornar no select duas ou mais variaveis pois o modelo não está no obejto estoque_item e sim modelo como fazer :


jhl.append("select estoque_item,modelo from estoque_item , modelo");


é um list 
List  itens = em.getManager().createQuery(jhl.toString()).getResultList();


ou 

Object em.getManager().createQuery(jhl.toString()).getResultList();

Use o operador NEW. Crie um construtor na sua entidade com os atributos que desejar.

Exemplo:

SELECT NEW Entity(e.campo1,e.campo2,e.campo3,...,e.campoN) FROM Entity e where .......

da esse erro


 java.lang.ClassCastException: [Ljava.lang.Object;

Como está a consulta?

não tem outra forma de não criar um construtor para essa query ???

deu erro com essa query …


StringBuffer jhl = new StringBuffer();
			jhl.append("SELECT item , device " );
			jhl.append(" FROM estoque_item item ,");
			jhl.append("      dispositivo device  ");
			jhl.append(" where  item.device=device.id");
List  itens = em.getManager().createQuery(jhl.toString()).getResultList();

pois a ideia é colocar um objeto que não está em estoque_item que é modelo o proximo objeto que ficaria assim …

ai teria que incluir um objeto no estoque_item que não tem nada a ver com estoque_item no construtor para satisfazer o select ???

entendeu ???


StringBuffer jhl = new StringBuffer();   
            jhl.append("SELECT item , device ,modelo" );   
            jhl.append(" FROM estoque_item item ,");   
            jhl.append("      dispositivo device  ");   
            jhl.append("      modelo modelo  ");   
            jhl.append(" where  item.device=device.id");  
            jhl.append(" and  modelo.id=device.id_modelo");   
 
List  itens = em.getManager().createQuery(jhl.toString()).getResultList();  

Utilize o método createNativeQuery para essa forma que você está fazendo.

Se for utilizar a dica do construtor e o operador NEW, use o método createQuery.

peguei um exemplo abaixo você sabe se funciona se sim como posso ler esse list de object …

abs


List<Object[]>  itens = imsDBMng.getManager().createQuery(jhl.toString()).getResultList();

Para ler basta varrer com um forEach.


for (Object o : itens) {


}

tentei o codigo abaixo e deu erro java.lang.ClassCastException: [Ljava.lang.Object;

na linha Estoque_item[] item = (Estoque_item[])itens.get(0);

o que fazer ???


StringBuffer jhl = new StringBuffer();
			jhl.append("SELECT item , modelo " );
			jhl.append(" FROM estoque_item item ,");
			jhl.append("      dispositivo device     , ");
			jhl.append("      modelo modelo     ");
			jhl.append(" where item.device =device.id");
			jhl.append(" and   modelo.id  = device.model");
			
			List<Object[]>  itens = em.getManager().createQuery(jhl.toString()).getResultList();

for (int i = 0; i < itens.size(); i++) {
				
				Estoque_item[] item = (Estoque_item[])itens.get(0);
				System.out.println(" Stock Item  ");
				System.out.println("Id ="+item[i].getId());
				
				
			}

Você não pode fazer um cast de um Object em um Estoque_item.

Faça o seguinte (para aprendizado): execute a sua classe em modo debug e veja o que existe na lista itens.

cara está vindo certo só que não consigo fazer o cast pra ler o que vem …se puder me ajudar …


itens
   elementData
     [0]    object
        [0]        Estoque_Item
        [1]        Modelo

    [1]    object
        [0]        Estoque_Item
        [1]        Modelo

   

  qtde de elementos 0 até 19 ...

Oi paribe,

o vsousa já lhe disse como fazer nesse post.

solução


for (Object[] resultElement : itens) {
				EstoqueItem item   = (EstoqueItem)resultElement[0];
				Modelo      modelo = (Modelo)resultElement[1];