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;
   }
}