繁体   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