我必須在合適的表格格式中將員工和他的項目顯示在員工的下拉列表中。在頂部,我需要顯示記錄數。因此,我正在做兩個查詢,一個用於檢索計數,另一個用於檢索員工和他的項目。最後,總計數來到員工*項目計數。如何在hibernate中檢索不同的根實體行數?
如果員工有3個項目,那麼它計爲3.但我只需要員工數。而且我正在重新獲取明確的Employee
對象,該僱員對象的列表爲Project
。
我用.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
得到這樣的結果。
請幫我只得到員工數的代替員工*項目,我這個苦苦掙扎。
我的代碼是,
public Collection fetchEmployeeWithProject(final List condition,
final PaginationCriteria pageCriteria)
throws DataAccessLayerException {
Session session = this.getPersManager().getCurrentSession();
Criteria criteria = session.createCriteria(Employee.class, "employee")
.createAlias(
"employee.empProject", "empProject",
CriteriaSpecification.LEFT_JOIN).createAlias(
"empProject.Project", "project",
CriteriaSpecification.LEFT_JOIN);
criteria = this.addMultipleSeachCriteria(criteria, condition);
this.buildPaginatedCriteria(criteria, pageCriteria);
List lst = criteria.list();
session.clear();
return lst;
}
protected Criteria buildPaginatedCriteria(Criteria criteria,
PaginationCriteria pageCriteria) throws DataAccessLayerException {
logger.debug(LOG_PREFIX + "buildPaginatedCriteria::Begin");
if (pageCriteria != null) {
if (!pageCriteria.isFetchAll()) {
if (pageCriteria.getTotalRecords() == 0)
pageCriteria.setTotalRecords(((Integer) criteria
.setProjection(Projections.rowCount())
.uniqueResult()).intValue());
criteria.setProjection(null);
criteria.setFirstResult(
pageCriteria.getFirstRecordOfCurrentPage())
.setMaxResults(pageCriteria.getRecordsPerPage());
}
if (StringUtils.isNotBlank(pageCriteria.getSortBy()))
criteria.addOrder(pageCriteria.isSortDescending() ? Order
.desc(pageCriteria.getSortBy()) : Order
.asc(pageCriteria.getSortBy()));
if (StringUtils.isNotBlank(pageCriteria.getSecondarySortBy())) {
criteria.addOrder(Order.asc(pageCriteria.getSecondarySortBy()));
}
if (pageCriteria.isCached()) {
criteria.setCacheable(true).setCacheMode(CacheMode.NORMAL);
}
}
criteria
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
logger.debug(LOG_PREFIX + "buildPaginatedCriteria::End");
return criteria;
}
這些是我使用的方法。
嗨了,謝謝添加我的代碼。請幫忙。 – Jothi 2010-10-07 14:29:57
嗨,我能夠得到不同的根實體。我的問題是什麼如果我指定沒有記錄爲10,如果第一個員工有10個項目關聯,只有第一人列出沒有任何other.I需要回收10員工。 – Jothi 2010-10-11 11:17:28
我很抱歉,但我不明白你說什麼。你的問題是你只收到10行?在這種情況下,您可以嘗試使用'Criteria#setMaxResults(Integer.MAX_VALUE)',但我建議您將數據的檢索拆分爲更多的X行查詢。否則,您可能會遇到'PermGem'或'OutOfMemory'異常 – pakore 2010-10-11 12:42:02