【发布时间】:2021-11-14 00:46:06
【问题描述】:
我想知道,当我们查询作为外键的列时,hibernate 如何在内部查询表。更多理解请看代码
员工表
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
@Id
private String userId;
private String name;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinTable(
name = "employee_department",
joinColumns = @JoinColumn(name = "employee_id"),
inverseJoinColumns = @JoinColumn(name = "department_code")
private Department department;
}
部门表
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Department{
@Id
@Column(name = "code", unique = true)
private String code;
@Column(name = "name", nullable = false)
private String name;
}
因此,一旦部署了应用程序,我们将拥有三个表,即employee、department 和employee_department。现在,如果我像这样写休眠
findByDepartmentCodeIn(Department Code),hibernate 将如何在内部解析这个查询?我想在department_code 列上创建一个索引,以使前一个查询更快,那么我应该在department 表中还是在生成的合并employee_department 表中创建索引?
【问题讨论】:
-
从您的实体模型中,员工将属于一个部门,我试图了解您为什么需要连接表?难道你不能只在员工表中有部门 ID 列吗?当员工可以属于多个部门时,您可能需要连接表。
标签: java mysql spring hibernate spring-data-jpa