在JPA / Hibernate中限制为列表提取的数据的首选方法是什么?

时间:2013-03-06 19:35:41

标签: hibernate jpa

我正在试图找出正确加载显示数百行的列表视图的某些属性的正确方法。

例如,假设一个Person实体,它有很多属性,但我只想获得我的列表的名字和姓氏。

使用Hibernate / JPA实现这一目标的最佳方法是什么?

A)我应该安排我的实体,使他们只拥有一些属性,其余的是使用一对一的关系在不同的实体(和表)中吗?

B)我应该使用Hibernate的懒惰属性获取吗?即使是手册也说它“主要是营销功能”?

C)还有其他方法吗?

3 个答案:

答案 0 :(得分:3)

您可以使用JPQL NEW运算符。 您可以创建一些DTO对象并在JPQL查询中初始化它:

public class PersonDTO {

   private String firstName;
   private String surname;

   public PersonDTO(String firstName, String surname) {
      this.firstName = firstName;
      this.surname = surname;
   }

   // getters setters

}

Select NEW PersonDTO(p.firstName, p.surname) From Person p;

答案 1 :(得分:1)

为了最好地使用ORM,我会寻求解决方案一来尊重OOP范例并尝试封装事物。我猜测,如果你主要只需要两个属性,那么有一个专门用于使用这两个属性的类并将它与其他类相关联是有意义的。

答案 2 :(得分:1)

您可以考虑的另一种可能性是为同一个表定义两个不同的映射。例如。 PersonOverview只会映射几个属性,并且主要用于获取大量人物,而PersonDetails会映射所有可用的人物属性,但只有在某个特定人需要时才会使用被取出进行显示/编辑。