Java 带连接的hibernate查询

Java 带连接的hibernate查询,java,spring,hibernate,Java,Spring,Hibernate,我有两个实体,如下所示: @Entity @Table(name = "tax") public class TaxReturn { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(name = "period") private String fillingPeriod; @Column(name = "created_date")

我有两个实体,如下所示:

@Entity
@Table(name = "tax")
public class TaxReturn {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name = "period")
    private String fillingPeriod;
    @Column(name = "created_date")
    private LocalDateTime dateCreated;
    @Column(name = "total_tax")
    private int totalTax;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "tax_id", nullable = false)
    private List<Employee> employees;
}

@Entity
@Table(name = "emp")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "other_name")
    private String firstName;
    @Column(name = "surname")
    private String lastName;
    @Column(name = "tax_amount")
    private int taxAmount;
}
上面的信息代表一份申报表,其中包含一份说明已缴纳税款的员工名单。退货实体包含所有员工的总金额。我需要在HQL中编写一个查询,该查询将使用返回id和员工id检索员工。下面是我编写的内容,但我收到一个错误,因为它没有生成正确的mysql

session.getTransaction().begin();
Long taxReturnId = 5L;
Long empId = 4L;
Query query = session.createQuery("select p.employees from TaxReturn p left join Employee e where p.id = '5' and e.id = '4'");
List<Employee> employeeList = query.list();
System.out.println(employeeList.get(0).toString());
session.getTransaction().commit();
这是正确的查询吗

谢谢, Ashley

查询应为:

select p.employees from TaxReturn p left join p.employees e where p.id = '5' and e.id = '4'
注意:连接部分与您的不同,因为您必须在连接时指定映射关系的字段

此外,您还可以返回纳税申报表,并从中获取员工名单:

我还注意到,您以一种非传统的方式将关系映射为
通常单向映射是在多个一侧进行的,而不是在另一侧。这也存在一些与性能相关的问题,请查看此项了解更多详细信息

我发现这种关系有点模糊。多个员工是否可以有一个纳税申报表??看起来您希望检索员工4,但根本没有纳税申报表信息。因此,从Employee e,其中e.id=4,您是否可以用简单的句子陈述您希望通过查询解决的业务,而不需要技术性的东西?因为是雇主为其员工提交了纳税申报表,所以是的,多个员工可以属于一个纳税申报表。但我不想让这种关系成为双向关系。Shafinamud我需要能够为特定的报税单检索员工
Query query = session.createQuery("select p from TaxReturn p left join p.employees e where p.id = '5' and e.id = '4'");
List<Employee> employeeList = query.singleResult().getEmployees();