我的模特:
@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
和Company
之间的关联,受到时间间隔的限制。
我正在寻找一个JPA标准查询,以便在给定时间选择所有Person
及其就业。
预期结果是包含所有人的List<Person>
,其中每个employments
的集合Person
仅包含符合特定条件的工作(或没有任务)在所有)。
@Where
不是一种明智的做法,因为就业的过滤标准是可变的,例如我想在任何时候选择一个人的所有工作。
这是否合理?有什么建议如何以不同的方式做到这一点?
答案 0 :(得分:1)
不,这样做不合理。实体应该表示数据库中的数据,而不是特定查询返回的日期。
我只需添加从Employment
到Person
的ManyToOne关联,然后搜索就业情况。如果您需要这组人员,只需迭代工作并将每个就业人员添加到一个集合中。如果您希望在此日期与其工作相关的人员,您可以使用自定义课程,或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();