将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<?>

resultDTO对象列表(例如DQCategoryDTO),而无需使用任何循环,迭代器和调用setter / getter来填充值?

回答:

您可以使用ResultTransformer,它可以从别名转换为bean(DTO)属性。对于用法,您可以在此处的Hibernate文档第13.1.5节中找到。

以上是 将JPA或Hibernate投影查询映射到DTO(数据传输对象) 的全部内容, 来源链接: utcz.com/qa/413082.html

回到顶部