繁体   English   中英

如何检索已添加到集合中的最新记录?

[英]How to retrieve the latest record that has been added to a set?

我有一个名为MyClass的类,该类保留一组学生对象作为成员。

目前,我可以传递所需学生的ID并检索对象,但不确定如何检索已添加的最新对象。

我想知道如何更改代码以检索添加到班级的最后一个学生的对象?

“我知道set不能保持顺序,是否有任何方法可以使用hibernate或通过比较学生班级的enrolledDate成员来检索最新的方法?”

我的课

import java.util.Set

@Entity
public class MyClass {

   @Id
   @GeneratedValue
   private long id;

   @OneToMany
   @LazyCollection(LazyCollectionOption.FALSE)
   private Set<Student> students;

   ....
}

学生班

@Entity
public class Student {

   @Id
   @GeneratedValue
   private long id;

   private String name;

   @Temporal(javax.persistence.TemporalType.DATE)
   private Date enrolledDate; //I may need to use this date as it is enrollment date but not sure how to retrieve the latest one.
}

休眠代码

 MyClass myClass = (MyClass) session.get(MyClass.class, id);

 Iterator<MyClass> it = myClass.getStudents().iterator();

 Student stu = new Student();

 while (it.hasNext()) {
            stu = it.next();
            if (stu.getId() == stuId) {
                        break;
            }
 }

System.err.println("Student name is:" + stu.getName());

假设studentidauto increment您可以使用TreeSet以便最近的Student将是TreeSet最右边的元素compareTo()id上写您的compareTo() )。您可以使用TreeSet last()最新的。

即使使用id也可以使用任何升序(相应地编写compareTo()),然后将student放入TreeSet并获取last()即最近的student对象。

希望能帮助到你。

好的,可以通过以下两种方式之一对Hibernate中的Set(或其他集合)进行排序:使用@Sort(内存中排序)或使用@OrderBy(数据库排序)。

由于不能在嵌套属性(例如myclass.student.dateEnrolled)上使用@OrderBy,因此需要使用@Sort。

http://docs.jboss.org/hibernate/core/3.5/javadocs/org/hibernate/annotations/Sort.html

http://eubauer.de/kingsware/2011/03/15/ordering-collections-with-jpa/

然后,您需要做的就是:

@OneToMany
@Sort(...)
private Set<Student> students; //note leave as Set

如果Set中的类型实现Comparable,并且这是您想要的Order,则可以指定SortType.NATURAL。 否则,您可以指定一个Comparator来处理排序。

Hibernate将确保对传入的Set进行排序。 如果我们假设此Set实现了NavigableSet接口(并且您需要进行检查),则可以使用该接口的方法来查找最新的方法:

http://docs.oracle.com/javase/6/docs/api/java/util/NavigableSet.html

请注意,如果有大量学生,而您只想要最新的,那么这是次佳的解决方案,因为将加载所有学生。

Set不能维持顺序,您可以尝试其他Collections,例如LinkedHashSet,它以插入顺序存储元素,或者可以通过PriorityQueue从两端进行访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM