Cześć, mam taką zagwozdkę. Załóżmy dla uproszczenia, że mam taką encję Usera, odpowiadające mu dto zawierające dodatkowo pole mówiące czy na daną chwilę użytkownik jest wolny od tasków i repo tych tasków:
@Entity
class User {
@GeneratedValue
@Id
private long id;
private String name;
}
class UserDto {
private long id;
private String name;
private boolean free;
}
interface TaskRepository extends JpaRepository<Task, Long> {
//jakieś customowe @Query
long countUserTasksForNow(long userId, LocalDateTime now);
}
No i w standardowy sposób, jesli chcę zwrócić listę tych UserDto to:
- Pobieram z UserRepository : findAll()
- Mapuję z user list na userDto list.
- dla każdego userDto na liście robię coś takiego:
userDto.setFree(taskRespository.countUserTasksForNow(userDto.getId(), LocalDateTime.now() == 0);
No i właśnie .. tutaj idzie N+1 zapytań. Da się to zrobić tak, że przy wyciąganiu userów z bazy od razu te dane dostanę ? Tylko, że nawet gdyby to nie mam jak tego zmapować bo User nie ma pola Free
Pozdrawiam