我有以下 DailyEntry
属性:
@Data
@Entity
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DailyEntry {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private LocalDate date;
private LocalTime startTime;
private LocalTime endTime;
private Duration breaks;
private String performanceRecord;
private EntryStatus status;
@ManyToOne
private Project project;
@ManyToOne
private Employee employee;
}
我迭代项目的所有 DailyEntries
:
for (DailyEntry dailyEntry : dailyEntryRepository.findByProjectId(project.getId())) {
// do something
}
正在使用 DailyEntryRepository
中定义的自动生成的查询:
List<DailyEntry> findByProjectId(@Param("id") Long id);
正如您在实体定义中看到的,DailyEntry
与 Project
和 Employee
有两个 ManyToOne
关系。这意味着对于每个 DailyEntry
我从 dailyEntryRepository.findByProjectId(project.getId())
获取的两个 SQL 查询用于解析 Employee
和项目
。但在这种情况下我实际上并不需要它们。当我调用 dailyEntryRepository.findByProjectId(project.getId())
时,有没有办法告诉系统不解析 Employee
和 Project
?因为我认为这会提高性能,因为这会大大减少 SQL 查询的数量。
最佳答案
您可以尝试延迟加载 Project 和 Employee。延迟加载仅在需要时才获取项目。
@ManyToOne (mappedBy = "id", fetch = FetchType.LAZY)
关于java - 查询期间不要解析 @ManyToOne 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59265523/