hibernate连接多个表和组条件

hibernate连接多个表和组条件,hibernate,hql,criteria,Hibernate,Hql,Criteria,我有四张表,如下所示。我想通过加入所有这4个表进行查询,并检索电子邮件、注册日期、上次访问日期、访问次数、提供的反馈次数和上载的文件数量 Class User{ int userId; String email; Date registeredDate; UserVisits userVisits; //one-to-one relation Set<UserFeedback> feedbacks; //one-to-many

我有四张表,如下所示。我想通过加入所有这4个表进行查询,并检索电子邮件、注册日期、上次访问日期、访问次数、提供的反馈次数和上载的文件数量

Class User{
     int userId;
     String email;
     Date registeredDate;
     UserVisits userVisits; //one-to-one relation
     Set<UserFeedback> feedbacks; //one-to-many
     Set<UserUploads> uploads // one-to-many
}

Class UserVisits{
     int userId;
     Date lastVisited;
     int noOfVisits;
}

Class UserFeedback{
     int feedbackId;
     int userId;
     String feedback;
     Date feedbackDate
}

Class UserUploads{
      int fileId;
      User user;
      int fileName;
 }
如何使用这样的多个子查询

更新。有解决方案但存在lil问题

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(User.class, "user");
criteria.createAlias("user.userLogins","userLogins",Criteria.LEFT_JOIN);

DetachedCriteria fbCriteria = DetachedCriteria.forClass(UserFeedback.class, "feedback");
fbCriteria.add(Restrictions.eqProperty("feedback.userId", "user.userId"));
fbCriteria.setProjection(Projections.alias(Projections.count("feedback.userId"), "fbcount"));
fbCriteria.addOrder(Order.asc("fbcount"));
criteria.add(Subqueries.exists(fbCriteria)); 

DetachedCriteria mapCriteria = DetachedCriteria.forClass(FileUploads.class, "uploads");
mapCriteria.add(Restrictions.eqProperty("uploads.user.userId", "user.userId"));
mapCriteria.setProjection(Projections.count("uploads.user.userId"));
criteria.add(Subqueries.exists(mapCriteria)); 

List<User> users = criteria.list();
Criteria=sessionFactory.getCurrentSession().createCriteria(User.class,“User”);
createAlias(“user.userLogins”,“userLogins”,criteria.LEFT\u JOIN);
DetachedCriteria fbCriteria=DetachedCriteria.forClass(UserFeedback.class,“feedback”);
fbCriteria.add(Restrictions.eqProperty(“feedback.userId”、“user.userId”));
setProjection(Projections.alias(Projections.count(“feedback.userId”),“fbcount”);
fbCriteria.addOrder(Order.asc(“fbcount”));
添加(子查询.存在(fbCriteria));
DetachedCriteria mapCriteria=DetachedCriteria.forClass(FileUploads.class,“uploads”);
添加(Restrictions.eqProperty(“uploads.user.userId”、“user.userId”));
setProjection(Projections.count(“uploads.user.userId”);
criteria.add(subquerys.exists(mapCriteria));
列表用户=criteria.List();
这正是我想要的。对于带有“
fbcount
0
”的行,我希望在asc中下单时首先显示。但它正在发生。带有“
fbcount
”值“
0
”的行始终位于末尾


请任何人能建议我如何做到这一点

我建议你从阅读Hibernate/JPA教程开始,试着自己添加适当的注释,当你有更具体的问题时再回来。David,上面什么对你不具体?就像你在问:“如何使用Hibernate?”你在问之前读过吗?到目前为止你尝试了什么?我不是有意粗鲁,但问答网站的目标是帮助你解决特定的问题,而不是教授广泛的话题或为你做工作。如果你在询问之前表明你自己做了一些研究,人们会更愿意帮助你。大卫,我有更清楚的最新消息n真的在寻求帮助很好,现在的问题更清楚、更具体了。希望有人知道答案。
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(User.class, "user");
criteria.createAlias("user.userLogins","userLogins",Criteria.LEFT_JOIN);

DetachedCriteria fbCriteria = DetachedCriteria.forClass(UserFeedback.class, "feedback");
fbCriteria.add(Restrictions.eqProperty("feedback.userId", "user.userId"));
fbCriteria.setProjection(Projections.alias(Projections.count("feedback.userId"), "fbcount"));
fbCriteria.addOrder(Order.asc("fbcount"));
criteria.add(Subqueries.exists(fbCriteria)); 

DetachedCriteria mapCriteria = DetachedCriteria.forClass(FileUploads.class, "uploads");
mapCriteria.add(Restrictions.eqProperty("uploads.user.userId", "user.userId"));
mapCriteria.setProjection(Projections.count("uploads.user.userId"));
criteria.add(Subqueries.exists(mapCriteria)); 

List<User> users = criteria.list();