2011-10-09 56 views
0

我在我的web應用程序中使用JPA,當我不想DB返回所有的對象我這樣做:我的JPA查詢方法是正確的嗎?

Query query = super.entityManager.createQuery("select b.id, b.buyName from Buy b where b.id in (:list)"); 
    query.setParameter("list", buyIds); 

    List<Object[]> result = query.getResultList(); 
    List<Buy> retval = new ArrayList<Buy>(); 

    for (Object[] item : result) { 
     Buy buy = new Buy(); 
     buy.setId((Long)item[0]); 
     buy.setBuyName((String)item[1]); 
     retval.add(buy); 
    } 

    return retval; 

也就是說,查詢我想要的字段,然後手動創建一個列表期望的對象並填充它。 這是一個很好的做法嗎?感覺這樣做有更好的方法。

謝謝。

回答

1

可以直接從查詢中返回一個新的對象,只需要您需要的信息。例如,您的查詢應該是這樣的:

select new BuyDTO(b.id, b.buyName) from Buy b where b.id in (:list) 

和數據傳輸對象只包括所需字段:

public class BuyDTO { 

    private Long id; 
    private String buyName; 

    public BuyVO(Long id, String name) { 
     this.id = id; 
     this.buyName = name; 
    } 

    // getters and setters 

} 

當運行查詢,它會返回一個List<BuyDTO>

1

也許,你應該創建一個單獨的重量輕 POJO(只有所需的字段),然後將結果映射到POJO。

+0

心不是說我在做什麼,但沒有創建一個新的POJO? –

+0

您可以爲同一個類設置多個映射 - 但註釋配置將不起作用 –

+0

@Noam - 是的,您正在做類似的事情,但不是相同的。您正在明確構建您的POJO(忽略不需要填充的字段),而不是讓JPA爲您做。 – Saket