我的项目有问题。我正在尝试创建一个搜索功能来从用户表中搜索用户,但与此同时,我还想从另一个头像表中检索用户头像的相应“url”。我确实想在这两个表之间创建一个硬映射。如何使用 Hibernate Criteria 灵活地做到这一点?两个表都使用“loginID”的主键。
我有两个类:
public class User{
private String loginID;
private String screenname;
......
}
public class Avatar{
private Integer id;
private String loginID;
private String url;
.......
}
我写的:
public List<Users> searchLogin(String keywords, int startFrom) {
List<Users> userList = new ArrayList<Users>();
try {
Session session = HibernateUtil.beginTransaction();
Criteria criteria = session.createCriteria(Users.class,"users");
criteria.add(Restrictions.ilike("loginID", keywords, MatchMode.ANYWHERE));
userList = criteria.list();
if (session.isOpen()) {
session.close();
}
return userList;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
谢谢大家!!
最佳答案
晚了,但它可能对其他真正用谷歌搜索并最终来到这里的人有用。 无需映射或使用 HQL。
方法如下:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
Root<EntityA> entityARoot= criteria.from(EntityA.class);
Root<EntityB> entityBRoot = criteria.from(EntityB.class);
//Predicates
List<Predicate> predicates = new ArrayList<>();
//Add the predicates you need
//And predicates
List<Predicate> andPredicates = new ArrayList<>();
andPredicates.add(builder.equal(entityARoot.get("id"), entityBRoot.get("id")));
andPredicates.add(builder.and(predicates.toArray(new Predicate[0])));
criteria.multiselect(entityARoot, entityBRoot);
criteria.where(andPredicates.toArray(new Predicate[0]));
TypedQuery<Tuple> query = em.createQuery(criteria);
List<Tuple> result = query.getResultList();
关于java - 在没有实体映射设置的情况下使用 Hibernate Criteria 从多个表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291060/