gpt4 book ai didi

java - Spring、Hibernate : Retrieve Objects based upon date, 如果未找到,则为最近的日期

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:48 25 4
gpt4 key购买 nike

我正在开发一个 Spring-MVC 项目,其中我每天晚上都会创建 GroupNote 对象的备份。在创建备份之前,我检查指示对象已修改的boolean标志是否为true。如果是,则仅创建备份,并且创建对象时已设置日期。现在,当创建重复的 GroupNote 对象时,它具有最新的日期设置。

这样,用户可以选择特定日期,然后检索当天的数据集。

现在的问题是:

  1. 如果对象在第 3、4、5 天没有被修改,而是在第 6 天直接修改,然后在第 7 天,完成后,如果用户尝试检索第 3 天的对象,它没有被修改,但在第 6 天,会怎么样,那么我如何实现这个逻辑,我必须检索下一个最佳的逻辑。
  2. 我面临的另一个问题是,GroupNotes 与 GroupSection 具有多对一的映射。 如何检索给定日期的给定 GroupSection 的所有 GroupNote 对象,这不会提供第 3 天之后的所有实体,而仅提供第 6 个实体。

以下是我每天晚上创建重复项的方式:

  @Override
public void retrieveModifiedNotes() {
List<GroupNotes> groupNotesList = this.groupNotesDAO.listModifiedNotesForYesterday();
for(GroupNotes yesterdayNotes : groupNotesList){
yesterdayNotes.setLatestNote(false);
this.groupNotesDAO.editGroupNote(yesterdayNotes,yesterdayNotes.getOwnedSectionId());
GroupNotes newDayNotes = new GroupNotes();
BeanUtils.copyProperties(yesterdayNotes, newDayNotes);
newDayNotes.setLatestNote(true);
newDayNotes.setMnoticesid(0);
newDayNotes.setGroupNoteHistorySet(yesterdayNotes.getGroupNoteHistorySet());
newDayNotes.setNoteActivitySet(yesterdayNotes.getNoteActivitySet());
newDayNotes.setNoteSelectionSet(yesterdayNotes.getNoteSelectionSet());
newDayNotes.setUnreadNotesSet(null);
newDayNotes.setPrimaryNote(yesterdayNotes);
this.groupNotesDAO.addGroupNote(newDayNotes,yesterdayNotes.getOwnedSectionId());
}
}

DAO 我要获取修改后的注释:

@Override
public List<GroupNotes> listModifiedNotesForYesterday() {
Session session = this.sessionFactory.getCurrentSession();
Calendar cal = Calendar.getInstance(); // Todays date
Query query = session.createQuery("from GroupNotes as gs where gs.noteModified=true and gs.latestNote=true and " +
"gs.noteSavedDate<:loadDate");
query.setParameter("loadDate", cal.gethodtTime());
return query.list();
}

模型组注释:

@Entity
@Table(name = "groupnotes")
public class GroupNotes implements Serializable {


@Column(name = "note_modified", columnDefinition = "boolean default false")
private boolean noteModified;

@Column(name = "latest_note", columnDefinition = "boolean default true")
private boolean latestNote;

@Column(name = "note_save_date", columnDefinition = "date")
private Date noteSavedDate;


@ManyToOne
@JoinColumn(name = "msectionid")
@JsonIgnore
private GroupSection ownednotes;
}

有问题的 DAO 方法:

  @Override
@Transactional(readOnly = true)
public List<GroupNotes> listGroupNotesBySectionAndDate(int sectionId, Date dateToLoad) {
Session session = this.sessionFactory.getCurrentSession();
org.hibernate.Query query = session.createQuery("From GroupNotes as n where n.ownednotes.msectionid=:msectionid and ((n.noteDisabled=false and n.noteInActive=false "
+ "and n.privateNoteUser is null and n.noteSavedDate>:dateToLoad)) order by n.noteSavedDate asc");
query.setParameter("msectionid", sectionId);
query.setParameter("dateToLoad", dateToLoad);
return query.list();
}

正如您在上面的方法中看到的,我无法将查询限制为仅在特定日期找到的对象,我有一个比较运算符,它将提供指定日期之后/之前的任何日期的数据。

我希望问题已经清楚,如果有任何疑问,请告诉我。谢谢。 :-)

最佳答案

据我了解您的问题,您的 dao 方法非常好,但您只想获得最佳结果(具有最接近的日期)而不是整个列表,对吗?

在这种情况下,您应该使用 jpa hibernate 的分页机制来将查询结果限制为只有一行。

This问题应该有帮助。

关于java - Spring、Hibernate : Retrieve Objects based upon date, 如果未找到,则为最近的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35940298/

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