Hibernate子查询

Kee*_*ist 6 java sql hibernate

我在使用Hibernate创建子查询时遇到问题.不幸的是,Subqueries类几乎完全没有文档,所以我完全不知道如何将以下SQL转换为Hibernate Criteria:

SELECT id
FROM car_parts
WHERE car_id IN ( SELECT id FROM cars WHERE owner_id = 123 )
Run Code Online (Sandbox Code Playgroud)

我希望以下内容"正常工作":

session.createCriteria(CarParts.class).add(eq("car.owner", myCarOwner));
Run Code Online (Sandbox Code Playgroud)

但遗憾的是它没有.所以看来我实际上必须使用Subqueries类来创建Criteria.但我无法找到一个合理的例子,但是这导致我在这里问它.

小智 8

试试这样:

表详细信息):类别(id,name,desc,parentId,active)

    DetachedCriteria subCriteria = DetachedCriteria
            .forClass(Category.class);
    subCriteria.add(Restrictions.isNull("parent"));
    subCriteria.add(Restrictions.eq("active", Boolean.TRUE));
    subCriteria.add(Restrictions.eq("name", categoryName));
    subCriteria.setProjection(Projections.property("id"));

    Criteria criteria = getSession().createCriteria(Category.class);
    criteria.add(Restrictions.eq("active", Boolean.TRUE));
    criteria.add(Subqueries.propertyEq("parent", subCriteria));
Run Code Online (Sandbox Code Playgroud)

它将生成如下查询:

select*from Categories this_ where this_.active = 1 and this_.parentId =(选择this0_ .id作为y0 from Categories this0__,其中this0_ .parentId为null且 this0 _.active = 1且this0 __.name ='Health Plan')

祝好运!

-Rohtash Singh

  • criteria.add(Subqueries.propertyEq("parent",subCriteria)); 什么是父母在这里? (2认同)

Tom*_*ren 5

在添加如下的eq表达式之前,尝试为"car"属性创建别名:

session.createCriteria(CarParts.class)  
        .createAlias("car", "c")  
        .add(eq("c.owner", myCarOwner));  
Run Code Online (Sandbox Code Playgroud)