[英]fetch only last entries using criteria(Hibernate)
I have two entities Issue
and Issue_Tracker
. 我有两个实体Issue
和Issue_Tracker
。
Issue.java: Issue.java:
public class Issue implements Serializable
{
private Integer issue_id;
private String issue_description;
private Date issue_raised_date;
private Set<Issue_Tracker> issueTracker = new HashSet<Issue_Tracker>(0);
@OneToMany(fetch=FetchType.LAZY, mappedBy="issue_id")
public Set<Issue_Tracker> getIssueTracker() {
return issueTracker;
}
public void setIssueTracker(Set<Issue_Tracker> issueTracker) {
this.issueTracker = issueTracker;
Issue_Tracker.java: Issue_Tracker.java:
public class Issue_Tracker implements Serializable
{
private Integer issue_id;
private String tracker_status;
private Timestamp tracked_time;
when i left join both the table and i get following data as follows using query: 当我离开连接表和我得到以下数据使用查询如下:
SELECT issues.issue_id,
issues.issue_description,
issue_tracker.tracker_status,
issue_tracker.tracked_time
FROM issues
LEFT JOIN issue_tracker on issues.issue_id = issue_tracker.issue_id
WHERE issues.status = "Escalate To"
and output is 和输出是
issue_id tracker_status tracked_time
123 Assigned 1/8/2013 11:44 //1st entry
123 Assigned 1/9/2013 11:45
123 Completed 1/10/2013 12:52 // last entry
32 Assigned 1/9/2013 16:46 //1st entry
32 Assigned 1/10/2013 18:46 //last entry
33 Assigned 1/9/2013 16:47 //1st entry
33 Cancel 1/9/2013 17:49 //last entry
Now when i did these join using criteria, I get these results 现在,当我使用条件进行这些加入时,我得到了这些结果
issue_id tracker_status tracked_time
123 Assigned 1/8/2013 11:44 //1st entry of issue_id 123
32 Assigned 1/9/2013 16:46
33 Assigned 1/9/2013 16:47
using following criteria 使用以下条件
Criteria criteria = session.createCriteria(Issue.class);
criteria.setFirstResult(from);
criteria.setMaxResults(size);
criteria.setFetchMode("Issue.issueTracker",FetchMode.JOIN);
criteria.add(Restrictions.eq("status", "Escalate To"));
Now expected output is 现在预期的输出是
issue_id tracker_status tracked_time
123 Completed 1/10/2013 12:52 // last entry
32 Assigned 1/10/2013 18:46 //last entry
33 Cancel 1/9/2013 17:49 //last entry
How to achieve this, I am stuck here since last three days, any help would be great, is it happening because of this line where i am trying one to many mapping 如何实现这一点,自最近三天以来我一直在这里,任何帮助都会很大,是因为我尝试一对多映射的这一行而发生了吗?
private Set<Issue_Tracker> issueTracker = new HashSet<Issue_Tracker>(0);
because a Set does not allow duplicate values, if so what would be the possible approach. 因为Set不允许重复值,如果可以,那么可能的方法是什么。
Try this: 尝试这个:
SELECT i.issue_id, i.issue_description,
it.tracker_status, it.tracked_time
FROM issues i
LEFT JOIN ( SELECT it.issue_id, it.tracker_status, it.tracked_time
FROM issue_tracker it
INNER JOIN (SELECT issue_id, MAX(tracked_time) tracked_time
FROM issue_tracker GROUP BY issue_id
) A ON it.issue_id = A.issue_id AND it.tracked_time = A.tracked_time
) it ON i.issue_id = it.issue_id
WHERE i.status = "Escalate To";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.