Java 使用hibernate一对多查询对数据库的命中率是多少?
我的员工和部门之间有一对多的关系,我的班级看起来像:Java 使用hibernate一对多查询对数据库的命中率是多少?,java,hibernate,Java,Hibernate,我的员工和部门之间有一对多的关系,我的班级看起来像: @Entity public class Employee { @Id private int empId; private String empName; @OneToMany @JoinTable (name = "relationalTable" , joinColumns = @JoinColumn(name = "empId"),inverseJoinColumns=@JoinColumn(name = "deptId")) pri
@Entity
public class Employee {
@Id
private int empId;
private String empName;
@OneToMany
@JoinTable (name = "relationalTable" , joinColumns = @JoinColumn(name = "empId"),inverseJoinColumns=@JoinColumn(name = "deptId"))
private Collection <Department> dept = new ArrayList<Department>();
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public Collection<Department> getDept() {
return dept;
}
public void setDept(Collection<Department> dept) {
this.dept = dept;
}
@Column
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
}
如果我去叫警察局。因此,它将同时获取与其关联的所有员工。假设部门id为1,则有1000名员工。
那么,此时有多少查询将执行到数据库以获取所有数据?如果fetchType为Lazy Hibernate,请在尝试访问部门时检索记录
如果它的Hibernate很急切,那么将所有查询连接到一个查询中并执行一个查询 如果fetchType是Lazy Hibernate,请在尝试访问部门时检索记录
如果它的Hibernate很急切,那么将所有查询连接到一个查询中并执行一个查询 如果尚未指定提取类型,则默认情况下会延迟加载一对多关系。因此,您的Employee类有一对多个部门 因此,如果你加载1000名员工,那么将有1000个呼叫加载部门(每个员工一个呼叫)
我无法理解的是,在这个组织中,一个部门只能有一名员工,但一名员工可以在几个部门工作,这很奇怪 如果尚未指定提取类型,则默认情况下会延迟加载一对多关系。因此,您的Employee类有一对多个部门 因此,如果你加载1000名员工,那么将有1000个呼叫加载部门(每个员工一个呼叫)
我无法理解的是,在这个组织中,一个部门只能有一名员工,但一名员工可以在几个部门工作,这很奇怪 可能是惰性加载编辑可能是惰性加载协议。。。一个“部门”应该有n名员工,所以理想情况下,问题中提到的关系应该是颠倒的。。。一个“部门”应该有n名员工,因此问题中提到的关系最好是颠倒过来的
@Entity
public class Department {
int deptId;
String deptName;
private Employee emp;
@ManyToOne
public Employee getEmp() {
return emp;
}
public void setEmp(Employee emp) {
this.emp = emp;
}
@Id
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
@Column
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}