[英]Using HQL to select from joined tables having one to many relationship between them
[英]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.