gpt4 book ai didi

java - 使用 hibernate 获取一对多映射中的更新行

转载 作者:行者123 更新时间:2023-11-30 04:32:45 25 4
gpt4 key购买 nike

我有两个实体 Issue 和 Issue_Tracker。我已将两个表加入到一对多映射中。在 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

我想按 tracked_time 订购 Issue_tracker 实体,这样我只能获取最后更新 tracker_status。我正在使用标准来获取数据,但是我正在获取第一个条目,例如:对于 issues_id 123,我get tracker_status as Assigned ,但我想获取 id 123 的 tracker_status : Completed 。如何实现这一点。我的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;

希望你们能明白我想问的问题,有什么帮助吗?

最佳答案

向映射的集合添加 @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();

关于java - 使用 hibernate 获取一对多映射中的更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14255493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com