Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JPA/Hibernate中,限制列表获取数据的首选方法是什么?_Hibernate_Jpa - Fatal编程技术网

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

在JPA/Hibernate中,限制列表获取数据的首选方法是什么?,hibernate,jpa,Hibernate,Jpa,我正在试图找到一种正确的方法,只为显示数百行的列表视图加载一些属性 例如,想象一个人实体,它有很多属性,但我只想得到我的列表的名字和姓氏 使用Hibernate/JPA实现这一点的最佳方法是什么 A) 我应该安排我的实体,使它们只包含几个属性,其余的在单独的实体(和表)中使用一对一的关系吗 B) 我应该使用Hibernate的惰性属性获取吗?甚至手册上也说它“主要是一种营销功能” C) 还有其他方法吗?您可以使用JPQLNEW操作符。 您可以创建一些DTO对象,并在JPQL查询中对其进行初始化:

我正在试图找到一种正确的方法,只为显示数百行的列表视图加载一些属性

例如,想象一个人实体,它有很多属性,但我只想得到我的列表的名字和姓氏

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

A) 我应该安排我的实体,使它们只包含几个属性,其余的在单独的实体(和表)中使用一对一的关系吗

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


C) 还有其他方法吗?

您可以使用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;

为了最好地使用
ORM
,我会选择解决方案一,尊重
OOP
范式并尝试封装东西。我猜想,如果您主要只需要两个属性,那么有一个专用于使用这两个属性的类并将其与其他一些类关联是有意义的PersonOverview只映射几个属性,主要用于获取大量人员集合,而
PersonDetails
将映射所有可用人员属性,但仅在需要获取一个特定人员以进行显示/编辑时才使用