左边加入Hibernate查询

时间:2015-02-17 05:33:42

标签: jquery mysql sql hibernate java-ee

请帮助我理解下面写的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语句。

1 个答案:

答案 0 :(得分:0)

您的实体架构看起来像这样(属性被省略):

ER schema

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

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

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