【发布时间】:2014-05-26 10:36:24
【问题描述】:
我对 Hibernate 标准有疑问。我需要通过一些动态条件以及 Empoyee 字段(LAZY 字段)上的条件获取公司列表。我创建了这样的标准:
Criteria criteria = session.createCriteria(Company.class);
criteria.createAlias("employee", "employee");
criteria.add(Restrictions.eq("employee.someFieldForWhere", "text"));
criteria.list();
对于 Employee 字段的添加条件,我必须添加别名(在我的情况下,我添加了具有相同名称“员工”的别名)。
但在这种情况下,我得到不正确且非法的 SQL 查询 - 在这种情况下,Hibernate 尝试从别名中选择所有字段:
select
this_.id as id1_0_1_,
this_.employee_id as employee2_0_1_,
employee1_.id as id1_1_0_,
employee1_.someBigField as someBigF2_1_0_,
employee1_.someFieldForWhere as someFiel3_1_0_
from
Company this_
inner join
Employee employee1_
on this_.employee_id=employee1_.id
where
employee1_.someFieldForWhere=?
这是不可接受的,因为表 Employee 包含许多文件,我不需要在我的请求中加载它(在我的示例中它加载 id、 someFieldForWhere 和 someBigField )。
那么问题 - 如何在没有子实体的选择字段的情况下创建具有子实体条件的标准?
我需要这样的东西:
select
this_.id as id1_0_1_,
this_.employee_id as employee2_0_1_,
from
Company this_
inner join
Employee employee1_
on this_.employee_id=employee1_.id
where
employee1_.someFieldForWhere=?
玩的项目,有完整的来源 - https://github.com/Akvel/criteriaTest
【问题讨论】:
标签: java hibernate hibernate-criteria