1

Issue と の 2 つのエンティティがありIssue_Trackerます。1 対多のマッピングで両方のテーブルを結合しました。ではIssue_Tracker、次のように複数のエントリを持つことができます

  issue_id  tracker_status      tracked_time
    123     Assigned           1/8/2013 11:44
    123     Assigned           1/8/2013 11:45
    123     Completed          1/8/2013 11:52
    32      Assigned           1/9/2013 16:46
    33      Assigned           1/9/2013 16:47
    33      Cancel             1/9/2013 16:49 

最後の更新のみを取得できるように、Issue_tracker エンティティを tracked_time で注文したいのですがtracker_status、データを取得する基準を使用していますが、たとえば最初のエントリを取得tracker_status : Completedしています。 id 123.これを達成する方法。私のDAOは次のとおりです

     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"));
      return criteria.list();

問題.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

public class Issue_Tracker implements Serializable
{  
     private Integer   issue_id;
     private String    tracker_status;
     private Timestamp tracked_time;

皆さんが私が求めていることを理解していただけることを願っています。何か助けはありますか?

4

1 に答える 1

2

マップされたコレクションに @OrderBy アノテーションを追加します。これにより、追跡された時間順に並べられたセット内のエンティティが返されます。セット内の最初のエンティティが最新である必要があります。

//Issue.java
    @OneToMany(fetch=FetchType.LAZY, mappedBy="issue_id")
    @OrderBy("tracked_time DESC")
    public Set<Issue_Tracker> getIssueTracker() {
    return issueTracker;

次のことも試してみてください。

 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"));
 Criteria subCriteria = criteria.createCriteria("issueTracker");
 subCriteria.addOrder(Order.desc("tracked_time"));
 return criteria.list();
于 2013-01-10T10:25:35.883 に答える