From d3243b3fb56104facfe07a158f781fb390d856c8 Mon Sep 17 00:00:00 2001 From: Gabriel Menezes Date: Sat, 31 Oct 2026 19:36:33 -0400 Subject: [PATCH] fix(reports): resolve ResultSet is closed error on list templates by eager fetching associations with transactional --- .../repository/GeneratedReportRepositoryImpl.java | 15 ++++++++++++--- .../repository/ReportTemplateRepositoryImpl.java | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/GeneratedReportRepositoryImpl.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/GeneratedReportRepositoryImpl.java index 4accfc0..db86db2 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/GeneratedReportRepositoryImpl.java +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/GeneratedReportRepositoryImpl.java @@ -56,20 +56,29 @@ public class GeneratedReportRepositoryImpl implements GeneratedReportRepository, } @Override + @Transactional public Optional findGeneratedReportById(Long id) { - return findByIdOptional(id).map(ReportEntityMapper::toDomain); + return find("select distinct r from GeneratedReportEntity r left join fetch r.organization left join fetch r.project left join fetch r.user where r.id = ?1", id) + .firstResultOptional() + .map(ReportEntityMapper::toDomain); } @Override + @Transactional public List findByOrganizationId(Long organizationId) { - return find("organization.id = ?1 order by createdAt desc", organizationId).stream() + List entities = find("select distinct r from GeneratedReportEntity r left join fetch r.organization left join fetch r.project left join fetch r.user where r.organization.id = ?1 order by r.createdAt desc", organizationId) + .list(); + return entities.stream() .map(ReportEntityMapper::toDomain) .toList(); } @Override + @Transactional public List findByUserId(Long userId) { - return find("user.id = ?1 order by createdAt desc", userId).stream() + List entities = find("select distinct r from GeneratedReportEntity r left join fetch r.organization left join fetch r.project left join fetch r.user where r.user.id = ?1 order by r.createdAt desc", userId) + .list(); + return entities.stream() .map(ReportEntityMapper::toDomain) .toList(); } diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/ReportTemplateRepositoryImpl.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/ReportTemplateRepositoryImpl.java index 35c1b6a..34a6016 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/ReportTemplateRepositoryImpl.java +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/ReportTemplateRepositoryImpl.java @@ -56,20 +56,29 @@ public class ReportTemplateRepositoryImpl implements ReportTemplateRepository, P } @Override + @Transactional public Optional findReportTemplateById(Long id) { - return findByIdOptional(id).map(ReportEntityMapper::toDomain); + return find("select distinct t from ReportTemplateEntity t left join fetch t.sections s left join fetch s.filterCategory left join fetch t.project left join fetch t.organization left join fetch t.createdBy where t.id = ?1", id) + .firstResultOptional() + .map(ReportEntityMapper::toDomain); } @Override + @Transactional public List findByOrganizationId(Long organizationId) { - return find("organization.id = ?1 order by createdAt desc", organizationId).stream() + List entities = find("select distinct t from ReportTemplateEntity t left join fetch t.sections s left join fetch s.filterCategory left join fetch t.project left join fetch t.organization left join fetch t.createdBy where t.organization.id = ?1 order by t.createdAt desc", organizationId) + .list(); + return entities.stream() .map(ReportEntityMapper::toDomain) .toList(); } @Override + @Transactional public List findByProjectId(Long projectId) { - return find("project.id = ?1 order by createdAt desc", projectId).stream() + List entities = find("select distinct t from ReportTemplateEntity t left join fetch t.sections s left join fetch s.filterCategory left join fetch t.project left join fetch t.organization left join fetch t.createdBy where t.project.id = ?1 order by t.createdAt desc", projectId) + .list(); + return entities.stream() .map(ReportEntityMapper::toDomain) .toList(); }