JPA:如何筛选关联?
我的模型:JPA:如何筛选关联?,jpa,jpa-2.0,criteria-api,Jpa,Jpa 2.0,Criteria Api,我的模型: @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
@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;
}
@实体
班主任{
@身份证
长id;
@独身癖
Set employments=new HashSet();
}
@实体
阶级就业{
@身份证
长id;
@许多酮
公司;
日期从;
日期至;
}
它是人
和公司
之间的关联,受时间间隔的限制
我正在寻找一个JPA标准查询,以选择给定时间的所有人员及其工作
预期结果是一个包含所有人员的列表
,其中每个人员的雇员
集合只包含符合特定标准的雇员(或根本不包含雇员)
@其中
不是一种明智的方法,因为员工的筛选标准是可变的,例如,我希望在任何给定时间选择一个人的所有员工
这样做合理吗?有什么不同的建议吗?没有,这样做是不合理的。实体应该表示数据库中的数据,而不是特定查询返回的日期
我只需将一个多人协会从Employment
添加到Person
,然后搜索Employment。如果您需要人员集,只需遍历employments并将每个employment的人员添加到一个集合中即可。如果您希望在该日期与他们的工作相关联的人员,您可以使用自定义类或多重映射
String hql=“从就业中选择就业”
+“左加入获取就业。人员”
+“其中:employment.startDate和employment.endDate之间的日期”;
List employments=session.createQuery(hql)
.setDate(“日期”,日期)
.list();
不,这样做是不合理的。实体应该表示数据库中的数据,而不是特定查询返回的日期
我只需将一个多人协会从Employment
添加到Person
,然后搜索Employment。如果您需要人员集,只需遍历employments并将每个employment的人员添加到一个集合中即可。如果您希望在该日期与他们的工作相关联的人员,您可以使用自定义类或多重映射
String hql=“从就业中选择就业”
+“左加入获取就业。人员”
+“其中:employment.startDate和employment.endDate之间的日期”;
List employments=session.createQuery(hql)
.setDate(“日期”,日期)
.list();
谢谢你的提示!搜索关系而不是主实体是一个好主意。谢谢你的提示!搜索关系而不是主实体是一个好主意。
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();