gpt4 book ai didi

java - Criteria 当只需要实体类的一部分时,添加实体类中的所有表

转载 作者:行者123 更新时间:2023-11-29 13:23:28 26 4
gpt4 key购买 nike

当我使用 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 - 它为所有可能的表创建一个左连接。

当它不应该为所有这些创建连接时。难道 Criteria 不够聪明,知道我不需要这张表吗?只有一个我使用了 "WHERE CLAUSE"有没有办法明确告诉 Criteria “不要加入这个表格!!!”没有 SQL

最佳答案

ManyToOne 注释上指定获取类型:

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

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

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

关于java - Criteria 当只需要实体类的一部分时,添加实体类中的所有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com