我有一个名为 MyClass 的类,它保留一组学生对象作为成员。
目前我可以传递所需学生的 ID 并检索对象,但不知道如何检索已添加的最新学生。
我想知道如何更改代码以检索添加到类(class)的最后一个学生的对象?
“我知道 set 不维护顺序,是否有任何方法可以使用 hibernate 或通过比较学生类(class)的 enrolledDate 成员来检索最新的一个?”
我的类(class)
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.
}
hibernate 代码
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());
最佳答案
好的,Hibernate 中的 Set(或其他集合)可以通过以下两种方式之一进行排序:使用 @Sort(内存排序)或使用 @OrderBy(数据库排序)。
由于 @OrderBy 不能用于嵌套属性(例如 myclass.student.dateEnrolled),因此您需要使用 @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 并且这是您想要的顺序,您可以指定 SortType.NATURAL。否则,您可以指定一个比较器来处理排序。
Hibernate 将确保传入的 Set 已排序。如果我们假设此 Set 实现了 NavigableSet 接口(interface)(并且您需要检查这一点),那么您可以使用该接口(interface)的方法来查找最新的:
http://docs.oracle.com/javase/6/docs/api/java/util/NavigableSet.html
请注意,如果有大量学生,而您只想要最新的,那么这是一个次优解决方案,因为所有学生都会被加载。
关于java - 如何检索已添加到集合中的最新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20137100/