簡體   English   中英

使用HQL從具有一對多關系的聯接表中選擇

[英]using HQL select from joined tables having one-to-many relationship

我有兩節課,然后我之間有一對多的關系。 這些類是:

@Entity
@Table(name = "emp300", uniqueConstraints = @UniqueConstraint(columnNames = {"personId", "empName","last_name"}))
public class Employee implements Serializable{

    @SequenceGenerator(name="seq",sequenceName="my_seq")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
    @Id
    private int Pid;


    private String empName, last_name, position, boss,personId;
    private String birthDate;
    private int salary;


    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "depId", nullable = false)
    private Department department;
    //setters and getters 
    }

第二個:

@Entity
@Table(name = "dep300", uniqueConstraints = @UniqueConstraint(columnNames = "depName"))
public class Department implements Serializable, Comparable<Department> {

    @SequenceGenerator(name = "seq", sequenceName = "DEPARTMENTS_SEQ")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
    @Id
    private int depId;

    private String depName;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "department", cascade=CascadeType.ALL)
    private Set<Employee> lst = new HashSet<Employee>(0);
    //setters and getters
    }

現在我對如何用白色HQL命令獲取每個部門中的所有員工字段(傳遞參數部門名稱)感興趣

首先在Department類中進行以下更改

public class Department implements Serializable, Comparable<Department> {
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "department", cascade=CascadeType.ALL)
    private Set<Employee> lst = new HashSet<Employee>(0);
}

當您提取部門時,這將幫助您提取所有工作的員工。

然后如下所示將方法添加到您的存儲庫類。 我假設您使用某種形式的Spring數據CRUD存儲庫來完成此工作。 如果沒有,請根據您的設置進行必要的更改。

public interface DepartmentRepository extends JpaRepository<Department, Integer> {
    @Query("SELECT d from Department d where d.depName = :depName")
    Department getDepartmentByName(@Param("depNamename") String depName)
}

希望這可以幫助。 編碼愉快!

您是否嘗試從Employee類中選擇帶有子句的科室。 depName =:passingParam

from Employee e where e.department.depName = :passingParam;

保持一切懶惰,否則,在不需要其他查詢時將引入聯接。

使用以下查詢獲取員工列表:

SELECT e FROM Employee e WHERE e.department.depName = :departmentName

或以下獲取雇員的部門列表:

SELECT d FROM Department d LEFT JOIN FETCH d.lst WHERE d.depName IN (:departmentNames)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM