java - 查询期间不要解析 @ManyToOne 字段

标签 java sql

我有以下 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);

正如您在实体定义中看到的,DailyEntryProjectEmployee 有两个 ManyToOne 关系。这意味着对于每个 DailyEntry 我从 dailyEntryRepository.findByProjectId(project.getId()) 获取的两个 SQL 查询用于解析 Employee 项目。但在这种情况下我实际上并不需要它们。当我调用 dailyEntryRepository.findByProjectId(project.getId()) 时,有没有办法告诉系统不解析 EmployeeProject ?因为我认为这会提高性能,因为这会大大减少 SQL 查询的数量。

最佳答案

您可以尝试延迟加载 Project 和 Employee。延迟加载仅在需要时才获取项目。

@ManyToOne (mappedBy = "id", fetch = FetchType.LAZY)

关于java - 查询期间不要解析 @ManyToOne 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59265523/

相关文章:

java - Android签名initVerify导致异常

sql - SQL条件插入数据。 SQLite的

mysql - 拆分字符串并循环遍历 MySQL 存储过程中的值

sql - 为具有复杂关系的 3 个表创建 View

mysql - SQL/自连接/下属数量

java - 使用 Bouncy CaSTLe (Java) 重建 ED25519 key

java - 我在使用 JJWT 库创建 JWT 时遇到问题

SQL 不同的连接不会对结果产生任何影响

java - 使用 Jersey CDI 自动关闭数据库连接?

java - Eclipse找不到Maven依赖包