когда я создаю запрос на подсчет с помощью hibernate-Criteria-добавляю всю возможную таблицу из класса сущностей как левое соединение, что является плохой производительностью.
Организация :
@Entity
@Table(name = "employees")
Public Class Employees {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "lz_job_stat_id")
private Integer id;
@ManyToOne
@JoinColumn(name = "departments_id")
private Departments departments;
@ManyToOne
@JoinColumn(name = "managers_id")
private Managers managers;
}
И критерии:
public class EmployeeDao {
public List<EmpDao> findIt(){
.....
Criteria crit = createEntityCriteria().setFetchMode("departments", FetchMode.SELECT);
crit.add(Restrictions.eq("managers.deleted", false));
crit.setProjection(Projections.count("id"));
return crit.list();
}
}
И произведенный SQL:
select count() as y0_
from employees this_
left outer join departments department3_
on this_.department_id=department3_.department_id
left outer join managers manager2_
on this_.manager_id=manager2_.manager_id
теперь, когда я пробую crit.list - он создает левое соединение для всех возможных таблиц.
когда не предполагается создавать объединение для всех из них. Разве Критерии недостаточно умны, чтобы знать, что мне не нужны эти таблицы? только тот, который я использую "WHERE CLAUSE"
, есть ли способ явно указать критерию "НЕ ПРИСОЕДИНЯЙТЕСЬ К ЭТИМ ТАБЛИЦАМ !!!" без SQL