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

标签 java hibernate set hibernate-mapping

我有一个名为 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/

相关文章:

java - 交易不活跃 - hibernate - JPA

java - 我是否应该延迟定义 JPA ManyToOne,或者如果我确实不需要引用的数据,则只需将原始 id 映射到我的实体中?

java - JScrollPane 未显示

java - Install4j:覆盖默认回滚

java - 实现保持状态的 Quartz 作业的推荐方法

java - 神经网络反向传播无法正确计算权重

java - 如何使用Hibernate SQL投影查询?

c - 使用指针设置操作

arrays - 在 Go slice 或数组中查找唯一项

Android EditText + 设置一些文字颜色