返回实体的列表而不是对象列表

时间:2014-02-14 12:34:52

标签: java jpa

Eclipse / Java

我有一种执行数据库查询的方法。

myBean:

List<Composicao> itemProdutoLista = compPrecoServico.buscar(Composicao.nomeQuery);

nomeQuery是:

@NamedQuery(name = "nomeQuery", query= " SELECT composicao.valortotal,composicao.id FROM Composicao composicao

query - javax.persistence.query

public List<T> buscar(String nomeQuery) {
    Query query = entityManager.createNamedQuery(nomeQuery);
    return query.getResultList();
}

我的返回列表公交车让我得到:一个Object elementData

enter image description here

如何在返回的buscar方法中获取Entity Composicao元素数据?而不是object elementData

2 个答案:

答案 0 :(得分:3)

我在上一个问题中提供了查询:

SELECT composicao FROM Composicao composicao

您是否理解选择实体的两个字段,就像您在查询中所做的那样

SELECT composicao.valortotal,composicao.id FROM Composicao composicao
                    ^-- first field      ^-- second field    

不返回Composicao对象,只返回您选择的两个字段:valortotalid

您明确要求JPA仅返回 <{strong> valortotalid。为什么它会返回所有其他字段并创建Composicao对象?你想要所有的字段,而不仅仅是valortotal和id。所以查询是(我将在第三次重复以防万一):

SELECT composicao FROM Composicao composicao

答案 1 :(得分:0)

假设你在谈论像JPA这样的事情。

在你的实体上放置一个构造函数(除了空/默认构造函数),它接受你的每个查询参数。

@Entity
public class Jedi
   @Id private int id;
   private String name;

   //required by the standard
   public Jedi(){}

   public Jedi(int id, String name) {
     this.id = id;
     this.name = name;
   }

   //...
 }

然后你的查询

select NEW org.starwars.Jedi(j.id,j.name) from Jedi j where name.endsWith('Sky Walker')