Jpql提取以从现有数据库中提取数据

问题描述 投票:0回答:1

我有两个表,存在一对多关系,但我不知道如何在两个表之间建立一对多关系,以及如何编写联接提取查询

部门表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进行的查询

hibernate jpa spring-data-jpa spring-data jpql
1个回答
0
投票
您在实体Employee中添加外键的方式不正确。

代替

@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..

© www.soinside.com 2019 - 2024. All rights reserved.