将JPA或Hibernate投影查询映射到DTO(数据传输对象)
在我的DAO层中,我有一个类似的Find函数
public List<?> findCategoryWithSentenceNumber(int offset, int maxRec) { Criteria crit = getSession().createCriteria(Category.class, "cate");
crit.createAlias("cate.sentences", "sent");
crit.setProjection(Projections.projectionList().
add(Projections.property("title"), "title").
add(Projections.count("sent.id"), "numberOfSentence").
add(Projections.groupProperty("title"))
);
crit.setFirstResult(offset);
crit.setMaxResults(maxRec);
return crit.list();
}
因此,为了读取数据,我必须使用Loop(带有Iterator
)
List<?> result = categoryDAO.findCategoryWithSentenceNumber(0, 10);// List<DQCategoryDTO> dtoList = new ArrayList<>();
for (Iterator<?> it = result.iterator(); it.hasNext(); ) {
Object[] myResult = (Object[]) it.next();
String title = (String) myResult[0];
Long count = (Long) myResult[1];
assertEquals("test", title);
assertEquals(1, count.intValue());
// dQCategoryDTO = new DQCategoryDTO();
// dQCategoryDTO.setTitle(title);
// dQCategoryDTO.setNumberOfSentence(count);
// dtoList.add(dQCategoryDTO);
}
我的问题是:是否有任何api框架可以轻松地将其转换List<?>
result为DTO
对象列表(例如DQCategoryDTO),而无需使用任何循环,迭代器和调用setter / getter来填充值?
回答:
您可以使用ResultTransformer,它可以从别名转换为bean(DTO)属性。对于用法,您可以在此处的Hibernate文档第13.1.5节中找到。
以上是 将JPA或Hibernate投影查询映射到DTO(数据传输对象) 的全部内容, 来源链接: utcz.com/qa/413082.html