java - Spring JPA 连接两个表,无需第三类

标签 java spring jpa spring-data-jpa jpql

有没有一种方法可以在 Spring JPA 中连接两个表而不使用关联类。

我有两个 MySQL 数据库表: 员工(id,......,部门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

关于java - Spring JPA 连接两个表,无需第三类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56732176/

相关文章:

java - 当我们在 socket.accept() 方法之后创建一个新线程时会发生什么?

java - 我如何在 Spring Boot/MVC 中创建错误处理程序(404、500...)

java - J 卡片列表?

java - `scale` 中的 `BigDecimal#divide()` 越高,速度越快?

java - 主要优点/区别是什么 [ spring-cache vs plain map caching ]

java - Spring cloud stream kafka binder 是否有一个很好的例子来使用通用的 json 消息

java - 运行作业时更新 Play Framework 中的行

java - 从数据库流式传输数据集

java - 带有额外字段的 JPA 自引用 OneToMany 映射

java - 如何制作一个出现在我创建的任何 JFrame 顶部的 Swing 菜单栏?