MySQL 查询到 Hibernate Query

MySQL query to Hibernate Query

谁能给我与下面给出的 MySQL 查询等效的 Hibernate 查询。我这几天没试过,但没成功。

这是MySql查询

  SELECT * FROM product WHERE category_id IN (SELECT id FROM  category WHERE parent_category_id IN (SELECT id FROM category WHERE parent_category_id=53));

我写的 Hibernate 查询是。

public List<Product> findBy2ndLevel(String categoryName) {

    Query query = null;
    StringBuilder hql = new StringBuilder();
    try {
        hql.append("from Product product where product.category.id in");
        hql.append("(select id from Category category where category.parentCategory.id in");
        hql.append("(select id from Category category where category.parentCategory.id=:category_id))");
        query = sessionFactory.getCurrentSession().createQuery(hql.toString());
        query.setParameter("category_id",Integer.parseInt(categoryName));
    } catch (HibernateException e) {
        e.printStackTrace();
    }
    return  query.list();
}

虽然它不起作用。给任何人正确的或给我等效的 HQ。

我假设实体产品有 1 个类别和一个变量(称为 category),并且一个类别有 1 个父类别和一个变量(称为 parent ).

但是,类似于:

select p
from Product p join p.category c join c.parent pc
where pc.id = :categoryId

此外,我并没有真正理解你的变量使用,你 link 类别的 id 与 categoryName,并包含一个变量 orgaId,它从未真正用于任何事情.. 此外,如果查询创建失败,您的代码将生成 NullPointerException