と の 2 つのエンティティがIssue
ありIssue_Tracker
ます。
問題.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;
両方のテーブルを結合したままにすると、次のようにクエリを使用して次のデータを取得します。
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"
出力は
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
基準を使用してこれらの結合を行うと、これらの結果が得られます
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
次の基準を使用して
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"));
現在、期待される出力は
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
これを達成する方法、私は過去 3 日間ここで立ち往生しています。どんな助けでも素晴らしいでしょう。1 対多のマッピングを試みているこの行が原因で起こっているのですか?
private Set<Issue_Tracker> issueTracker = new HashSet<Issue_Tracker>(0);
Setは重複する値を許可しないため、もしそうなら、可能なアプローチは何でしょうか。