gpt4 book ai didi

java - SELECT 中的子查询可以返回多行吗?

转载 作者:行者123 更新时间:2023-12-01 19:26:47 26 4
gpt4 key购买 nike

我有以下代码:

for (Project project : projectRepository.findAllWithoutEmployee()) {
for (DailyEntry dailyEntry : dailyEntryRepository.findMinimalisticDailyEntryByProjectId(project.getId())){
// do something
}
}

查询:

  @Query("SELECT new de.hiqs.project.Project(project.id, project.name, project.budget, " +
"project.description, project.isArchived, project.archivedDate, " +
"project.creationDate, project.customer.name) " +
"FROM Project project")
List<Project> findAllWithoutEmployee();

@Query("SELECT new de.hiqs.dailyentry.DailyEntry(dailyEntry.date, dailyEntry.startTime, dailyEntry.endTime, dailyEntry.status)" +
"FROM DailyEntry dailyEntry " +
"WHERE dailyEntry.id = :id")
List<DailyEntry> findMinimalisticDailyEntryByProjectId(@Param("id") Long id)

所以我调用第一个查询一次来获取所有项目。然后,如果 n 是项目数,我将调用第二个查询 n 次。有没有一种方法可以将两个查询合并在一个查询中,这样我就不必向远程数据库发送这么多查询?我需要以某种方式从第一个查询中获取一个 dailyEntries 列表作为属性,但我认为这是不可能的,因为这不是数据库中持久存在的字段。 DailyEntryProject 具有 OneToMany 关系。

编辑:

我尝试做这样的事情:

  @Query("SELECT new de.hiqs.project.Project(project.id, project.name, project.budget, " +
"project.description, project.isArchived, project.archivedDate, " +
"project.creationDate, project.customer.name, (SELECT dailyEntry.id FROM DailyEntry dailyEntry)) " +
"FROM Project project")
List<Project> findAllWithoutEmployee();

但是我收到错误错误:用作表达式的子查询返回的不止一行。那么是否可以使用在 SELECT 语句中返回多行的子查询?

编辑2:

我的实体:

项目:

@Data
@NoArgsConstructor
@Entity
@ToString(exclude = {"employees"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Project {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@Column(unique = true)
private String name;

private Integer budget;

private String description;

private Boolean isArchived;

private LocalDate archivedDate;

private LocalDate creationDate;
}

每日条目:

@Data
@NoArgsConstructor
@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;
}

最佳答案

也许您正在寻找 @OneToMany 关系。如果您使用 Hibernate JPA,最好的解决方案是在实体级别设置关系。

查看本教程了解如何使用它: https://www.baeldung.com/hibernate-one-to-many

关于java - SELECT 中的子查询可以返回多行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59307039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com