Je dois montrer Employee et son projet dans la liste déroulante à l'employé dans le bon trajet du format tabulaire. En haut, je dois montrer le nombre d'enregistrements. Donc, je fais deux requêtes, une pour récupérer le compte et un autre pour récupérer l'employé et son projet.enfin, le compte le nombre total vient employé * projet compte.comment récupérer le nombre distinct de lignes d'entité racine dans Hibernate?
Si un employé a 3 projets alors il compte 3. Mais je n'ai besoin que du nombre d'employés. Et je retrivais objet Employee
distinct, cet objet employé a la liste de Project
. J'ai utilisé .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
pour obtenir ceci.
S'il vous plaît aidez-moi à obtenir que employé compte au lieu de employé * projet, je me bats avec cela.
Mon code est,
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;
}
Ce sont les méthodes que j'utilise.
Salut, Thanks.I ont ajouté mon code. S'il vous plaît aider à ce sujet. – Jothi
Salut, je suis capable d'obtenir des entités racines distinctes.Quel est mon problème Si je ne spécifie pas d'enregistrements comme 10, si le premier employé a 10 projets associés, seule la première personne est répertoriée pas autre.J'ai besoin de retriver 10 Employé. – Jothi
Je suis désolé mais je ne comprends pas ce que vous dites. Votre problème est que vous ne recevez que 10 lignes? Dans ce cas, vous pouvez essayer avec 'Criteria # setMaxResults (Integer.MAX_VALUE)', mais je vous recommande de diviser la récupération des données en plusieurs requêtes de X lignes chacune. Sinon, vous pouvez subir une exception «PermGem» ou «OutOfMemory» – pakore