我有两个表,存在一对多关系,但我不知道如何在两个表之间建立一对多关系,以及如何编写联接提取查询
部门表dept_id-主键名称VARCHAR(45),部门
员工表emp_id-主键dep_id-外键刷新部门表pk名称电话号码电子邮件
我干了像一对多的关系
@Entity
@Table(name="department")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="dept_id")
private Long id;
private String name;
@Column(name = "department_code")
private String departmentCode;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Employee> employees;
//getter setter
@Entity
@Table(name="employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="emp_id")
private Long id;
private String name;
@Column(name = "dep_id")
private Long dpId;
@Column(name = "phone_Number")
private String phoneNumber;
private String email;
// getter setter
@Query(value = "select d from dept_uni d join fetch emp_uni e on d.id = e.dep_id where dept_id = :id")
Department findDepartmentById(@Param(value = "id") Long id);
我该如何进行映射以及应该使用join fetch进行的查询
代替
@Column(name = "dep_id")
private Long dpId;
您应该有类似的东西
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dep_id") private Department department;
现在您可以通过实体员工本身访问部门。
Employee emp = employeeRepo.findOne(1); emp.getDepartment().getName();
注意:JPQL仅适用于实体。因此它不知道您尝试编写的查询中的表dept_uni
。相反,您应该使用实体Department
;
select * from Department..