标准 当只需要实体的一部分时,添加实体 class 中的所有表

Criteria Add all the tables from the entity class when it only needs part of it

当我使用 hibernate 创建计数查询时 - 条件 - 添加实体 class 中所有可能的 table 作为左连接,性能不佳。

实体:

@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 - 它为所有可能的 table 创建一个左连接。

当它不应该为所有这些创建连接时。 难道 Criteria 不够聪明,知道我不需要这个 tables 吗?只有我用的 "WHERE CLAUSE" 有没有办法明确告诉 Criteria "DO NOT JOIN THIS TABLES !!!" 没有 SQL

ManyToOne 注释上指定提取类型:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "departments_id")
private Departments  departments;

或恕我直言,在标准中更可取:

criteria.setFetchMode("departments", FetchMode.SELECT)