java - 在没有实体映射设置的情况下使用 Hibernate Criteria 从多个表中检索数据

标签 java hibernate

我的项目有问题。我正在尝试创建一个搜索功能来从用户表中搜索用户,但与此同时,我还想从另一个头像表中检索用户头像的相应“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/

相关文章:

java - Android 自动完成 TextView 下拉宽度

java - Hibernate validator 自定义约束取决于基类

java - Hibernate 错误 : org. hibernate.InvalidMappingException:无法从资源解析映射文档

java - WHERE 中的 JPQL 单个集合元素

java - JPA 支持外连接,无需对象关系映射

java - 将 ActionPerformed 数组添加到字符串数组

java - 更改节点中标签的位置 - Jung2 Java Graph Library

java - Hazelcast JCache CacheEntryListener 触发过于频繁

java - 有限货币正则表达式

java - Hibernate 使用普通 POJO