我在 Hibernate.Say 报告和项目表中有一个一对多的关系。一个报告有很多项目,项目可以处于活动或非活动状态。我需要获取所有具有活动项目的报告。
Class Report{
@OneToMany(mappedby="reports")
List<Projects> projList;
/*get and set methods */
}
Class Project{
@ManyToOne
Report repors;
/*get and set methods */
/*This is a column which represenst ACTIVE or NOT*/
private status;
}
我正在尝试使用活动项目提取所有报告,我的标准如下所示:
List<Reports> reportsList = Criteria(Reports.class)
.createAlias("projList","projList",INNER_JOIN)
.add(Restrictions.eq("projList.status","ACTIVE")).list()
当我遍历报告列表并获取相应的项目时,无论是 ACTIVE 还是 INACTIVE,它都会返回我所有的项目。
for(Report rep:reportsList){
rep.getProjList();
//This is returning me all the projects irresective of my criteria for
// ACTIVE projects. This is hitting another query to the table with the report id
//only but not with the status= ACTIVE.So this is returning me all the Projects.
}
但是,当我执行 LEFT OUTER JOIN 而不是 INNER JOIN 时,我收到了正确的结果,即只有 ACTIVE 项目。我不确定为什么?
您能否解释一下如何以及它是否正确,并且在所有情况下都会保持一致?或者我应该加载活动项目并获得相应的报告,即具有项目标准(从孩子到父母)