我在我的网络应用程序中使用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;
即,查询我想要的字段,然后手动创建所需对象的列表并填充它。 这是一个好习惯吗?感觉有更好的方法可以做到这一点。
谢谢。
答案 0 :(得分:1)
答案 1 :(得分:1)
也许,您应该创建一个单独的轻量级 POJO(仅包含必填字段),然后将结果映射到该POJO。
答案 2 :(得分: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>
答案 3 :(得分:0)
如果使用EclipseLink,您还可以在查询上设置FetchGroup以定义要返回的字段。
请参阅, http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup