首页 > 解决方案 > jpql fetch 从已有的数据库中获取数据

问题描述

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

部门表 dept_id --主键名 VARCHAR(45),部门

Employee Table emp_id --primary key dep_id ---外键引用Department table pk name phone_Number email

我干了 OneToMany Relation Like

@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 设置器

@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);

我如何进行映射以及连接提取的查询应该是什么

标签: hibernatejpaspring-data-jpaspring-datajpql

解决方案


您在实体 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..


推荐阅读