我试图找出正确的方法来只加载显示数百行的列表视图的一些属性。
例如,想象一个 Person 实体,它有很多属性,但我只想获取列表的名字和姓氏。
使用 Hibernate/JPA 实现这一目标的最佳方法是什么?
A) 我是否应该安排我的实体,使它们只包含几个属性,而其余的则使用一对一的关系在单独的实体(和表)中?
B) 我应该使用 Hibernate 的惰性属性获取吗?甚至手册都说它“主要是营销功能”?
C)还有其他方法可以做到这一点吗?
您可以使用 JPQLNEW
运算符。您可以创建一些 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
将映射所有可用的人员属性,但仅在需要获取一个特定人员以进行显示/编辑时才使用。