java Spring,Hibernate:根据日期检索对象,如果找不到,则检索最近的日期
我正在做一个Spring MVC项目,在这个项目中,我每天晚上都在创建GroupNote对象的备份。在创建备份之前,我正在检查指示object
已修改的boolean
标志是否为true
。如果是,则只创建备份,并且创建对象的日期已设置。
现在,当创建重复的GroupNote对象时,它设置了最新的日期
这样,用户可以选择一个特定的日期,然后检索当天的数据集
现在,问题是:
- 如果对象在第3天、第4天、第5天没有被修改,而是直接在第6天修改,然后在第7天修改,一旦完成,如果用户试图从第3天检索对象,它没有被修改,但在第6天,那么我如何实现这个逻辑,我必须检索下一个最好的
- 我面临的另一个问题是,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());
}
}
让我修改笔记的方法是:
@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();
}
正如您在上面的方法中所看到的,我无法将查询仅限于在特定日期找到的对象,我有一个comparator运算符,它将给出指定日期之后/之前的任何日期的数据
我希望问题是清楚的,如果有任何疑问,请告诉我。谢谢。:-)
共 (0) 个答案