I'm developing a Java application using Spring Boot and JPA (Java Persistence API) with Hibernate. I have an entity Project that contains a one-to-many relationship with Activity.
I encounter the following error:
java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:773) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:754) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1305) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1294) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.classroomcreative.ClassRoomCreativeStart.main(ClassRoomCreativeStart.java:25) ~[classes/:na]
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.classroomcreative.domain.Project.activities: could not initialize proxy - no Session
    at org.hibernate.collection.spi.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:635) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
    at org.hibernate.collection.spi.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:218) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
    at org.hibernate.collection.spi.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:615) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
    at org.hibernate.collection.spi.AbstractPersistentCollection.read(AbstractPersistentCollection.java:136) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
    at org.hibernate.collection.spi.PersistentBag.toString(PersistentBag.java:610) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
    at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) ~[na:na]
    at org.classroomcreative.domain.Project.toString(Project.java:12) ~[classes/:na]
    at org.classroomcreative.ClassRoomCreativeStart.lambda$demo$0(ClassRoomCreativeStart.java:48) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:770) ~[spring-boot-3.1.0.jar:3.1.0]
    ... 5 common frames omitted
In my Project class, I have the following configuration for the one-to-many relationship:
@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Project {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;
    String target;
    List<String> images;
    @OneToMany(mappedBy = "project", cascade = CascadeType.ALL, orphanRemoval = true)
    List<Activity> activities;
}
The Activity class is also defined as an entity with the following configuration:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Activity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "project_id")
    Project project;
    String development;
    String targets;
    String basicKnowledge;
    String assessment;
}
And this is the test I'm running and getting the error:
@SpringBootApplication
@Slf4j
public class ClassRoomCreativeStart {
    public static void main(String[] args) {
        SpringApplication.run(ClassRoomCreativeStart.class, args);
    }
    @Bean
    public CommandLineRunner demo(ProjectRepository projectRepository, ActivityRepository activityRepository) {
        return (args) -> {
            ProjectServiceImpl service = new ProjectServiceImpl(projectRepository);
            Activity activity1 = new Activity();
            activity1.setTargets("Target for Activity 1");
            Project project = new Project();
            project.setTarget("Sample Project");
            project.setActivities(List.of(activity1));
            service.saveProject(project);
            // Retrieve projects and activities
            log.info("Projects found with findAll():");
            log.info("-------------------------------");
            for (Project p : service.getProjects()) {
                log.info(p.toString());
            }
        };
    }
}
My service is:
@Service
public class ProjectServiceImpl {
    private final ProjectRepository repository;
    public ProjectServiceImpl(ProjectRepository repository){
        this.repository = repository;
    }
    @Transactional
    public Project saveProject(Project project){
        return repository.save(project);
    }
    @Transactional(readOnly = true)
    public List<Project> getProjects(){
        return repository.findAll();
    }
}
I have tried all the solutions mentioned in How to solve the “failed to lazily initialize a collection of role” Hibernate exception, but the issue persists.
 
    