當我使用hibernate創建計數查詢時 - Criteria-將實體類中所有可能的表格添加爲左連接,這是不良的性能。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"
有沒有一種方法可以明確告訴Criteria 「不要加入這個表格!!!」 沒有SQL
休眠: /*條件查詢* /選擇 COUNT(*) as y0_ from employees This_ left outer join departments在this_.department_id = department3_.department_id department3_ LEFT OUTER JOIN \t經理manager2_上this_.manager_id = manager2_.manager_id – 2Big2BeSmall
我們爲什麼不看到manager.deleted =假的限制?你確定它是由這個標準生成的查詢嗎? – Thierry
它在複製粘貼上錯過了。在這種情況下 – 2Big2BeSmall