请帮助我理解下面写的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语句。
答案 0 :(得分:0)
您的实体架构看起来像这样(属性被省略):
您的HQL使用来自各种表的各种字段填充Product
实体。生成的SQL查询当然取决于实际的表。
如果两个表之间存在FK / PK关系,则很可能会生成 join 。如果数据库级别的表之间没有关系,则它会生成单独的选择。顺便说一句,您不需要猜测,因为您可以从Hibernate获取查询计划,并在需要时对其进行优化。
PS:为了帮助您找到等效的SQL查询,您必须提供实际的数据库架构。如果可以,请使用这些信息编辑问题。