有没有一种方法可以在不使用关联类的情况下联接Spring JPA中的两个表。
我有两个MySQL DB表:
员工(id,.....,department_id)
部门(id,.....)
我正在寻找一种仅使用员工和部门类来联接这些表的方法。
目前,我设法加入了两个表,但使用了第三个关联类。
我当前的实现是:
员工类别:
@Entity(name = "Employee")
@Table(name = "employees")
@JsonInclude(Include.NON_NULL)
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
@Column(name = "employee_id")
private Long employeeId;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "phone_number")
private String phoneNumber;
@Column(name = "hire_date")
private Double hireDate;
@Column(name = "job_id")
private Long jobId;
@Column(name = "salary")
private Double salary;
@Column(name = "commission_pct")
private Double commissionPct;
@Column(name = "employees")
private Long employees;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id", insertable = false, updatable = false)
@Fetch(FetchMode.JOIN)
private Department department;
}
部门课:
@Entity(name = "Department")
@Table(name = "departments")
@JsonInclude(Include.NON_NULL)
public class Department implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "department_name")
private String departmentName;
@Column(name = "department_id")
private long departmentId;
@Column(name = "manager_id")
private Double managerId;
@Column(name = "location_id")
private Double locationId;
}
协会班:
public class DeptEmpDto {
private long departmentId;
private String departmentName;
private Double managerId;
private Double locationId;
private long employeeId;
private String firstName;
private String lastName;
private String phoneNumber;
private Double hireDate;
private Long jobId;
private Double salary;
private Double commissionPct;
}
仓库:
public interface IEmployeeRepository extends JpaRepository<Employee, Long> {
@Query("SELECT new com.concretepage.entity.DeptEmpDto(d.departmentId,d.departmentName,d.managerId,d.locationId,e.employeeId,e.firstName,e.lastName,e.phoneNumber,e.hireDate,e.jobId,e.salary,e.commissionPct FROM Employee e INNER JOIN Department d ON d.id = e.jobId")
List<DeptEmpDto> fetchEmpDeptDataInnerJoin();
最佳答案
您可以在Employee类中使用它
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "DeptEmp",
joinColumns = @JoinColumn(name = "emp_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "dep_id",referencedColumnName = "id")
)
private Set<Departments> departments = new HashSet<>();
Look at this about JPA