【问题标题】:Left Join in Hibernate query休眠查询中的左连接
【发布时间】:2015-04-17 18:50:47
【问题描述】:

请帮助我理解下面写的 Hibernate Query。我是 hibernate 新手,很难理解一些用 hibernate 查询语言编写的查询。

代码如下:

public List<Product> findByCriteriaByType(Integer orgaId, String categoryName) {
        List<Product> products = null;
        StringBuilder hql = new StringBuilder();
        try{
            String categoryHql=(categoryName!=null)?" and categoryType.id=:category_type_id":" ";
            hql.append(" from Product product ");
            hql.append(" left join fetch product.category category ");
            hql.append(" left join fetch category.categoryType categoryType ");
            hql.append(" left join fetch product.retailerSnapshots retailerSnapshot ");
            hql.append(" where retailerSnapshot.organization.id=:org_id");
            hql.append(categoryHql);
            products = getProducts("category_type_id",orgaId, categoryName, hql);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            sessionFactory.getCurrentSession().close();
        }
        return products;
    }

private List<Product> getProducts(String parameter,Integer orgaId, String categoryName,StringBuilder hql) {
        Query query;
        query = sessionFactory.getCurrentSession().createQuery(hql.toString());
        if(categoryName!=null){
            query.setParameter(parameter,Integer.parseInt(categoryName));
        }
        query.setParameter("org_id",orgaId);
        return  query.list();
    }

还请告诉我等效的 SQL 语句。

【问题讨论】:

  • 你有什么不清楚的地方?
  • @meskobalazs : 我想知道 hql 语句在上述情况下的工作原理

标签: jquery mysql sql hibernate jakarta-ee


【解决方案1】:

您的实体架构如下所示(省略属性):

您的 HQL 使用来自各种表的各种字段填充 Product 实体。生成的 SQL 查询当然取决于实际的表。

如果两个表之间存在 FK/PK 关系,则很可能会生成 join。如果数据库级别的表之间没有关系,那么它会生成单独的selects。顺便说一句,您无需猜测,因为您可以从 Hibernate 中获取查询计划,并在需要时对其进行优化。

PS:为了帮助您找到等效的 SQL 查询,您必须提供您的实际数据库架构。如果可以,请使用这些信息编辑问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 2014-09-24
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多