2

我的模型:

@Entity
class Person {
    @Id
    long id;
    @OneToMany
    Set<Employment> employments =  new HashSet<Employment>();
}

@Entity
class Employment {
    @Id
    long id;
    @ManyToOne
    Company company;
    Date from;
    Date until;
}

Person它是 a和 a之间的关联Company,受时间间隔的限制。

我正在寻找一个 JPA 标准查询以Person在给定时间选择所有 s 及其工作。

预期结果是List<Person>包含所有employments人员,其中每个人的集合Person仅包含符合特定条件的就业(或根本不包含就业)。

@Where不是一种明智的方法,因为就业的过滤标准是可变的,例如,我想在任何给定时间选择一个人的所有就业。

这甚至是合理的做法吗?任何建议如何以不同的方式做到这一点?

4

1 回答 1

1

不,这不是一件合理的事情。实体应该表示数据库中的数据,而不是特定查询返回的日期。

我会简单地从Employmentto添加一个 ManyToOne 关联Person,然后搜索工作。如果您需要一组人员,只需遍历就业并将每个就业的人员添加到一个集合中。如果您想要在此日期与他们的工作相关联的人员,您可以使用自定义类或MultiMap<Person, Employment>.

String hql = "select employment from Employment employment"
             + " left join fetch employment.person"
             + " where :date between employment.startDate and employment.endDate";
List<Employment> employments = session.createQuery(hql)
                                      .setDate("date", date)
                                      .list();
于 2012-09-24T11:25:32.583 回答