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
在添加如下的eq表达式之前,尝试为"car"属性创建别名:
session.createCriteria(CarParts.class)
.createAlias("car", "c")
.add(eq("c.owner", myCarOwner));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25131 次 |
| 最近记录: |