Jak wyświetlić wszystkie projekty z zadaniami w Thymeleaf?

0

Witam,
Piszę prosty projekt do planowania zadań. Używam Springa, Hibernate i Thymeleaf.
Mam problem z wyświetleniem zadań należących do projektu.
robiłem to tak:

Mam dwie tabele złączone relacją 1

Project - ta tabela jest "kontenerem" na zadania
Task - tabela przechowuję zadania

Chcę to wyświetlić w takiej postaci:


| Nazwa projektu |

| Zadanie 1 |
| Zadanie 2 |
| Zadanie 3 |
|______________ |

Encja Project:

@Entity
@Table(name = "project")
public class Project {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "project_id")
    private Long projectId;
    @Column
    private String name;

    @OneToMany
    @JoinColumn(name = "task_id")
    private List<Task> task;
    // gettery i settery...
}

Bazę odpytuję w taki sposób

   @Repository
   public interface ProjectRepository extends JpaRepository<Project, Long> {
       @Query(value = "select p, p.task from Project p join fetch p.task")
       List<Project> findProjectsWithTasks();
    }
 

Wyświetlam w Thymeleaf w taki sposób:

 
<div th:each="project : ${projects}">
    <div th:text="${project.name}"></div>
    <div th:each="task : ${projects.task}">
        <div th:text="${task.name}"></div>
    </div>
</div>

Czy ktoś może mi wytłumaczyć co robię źle?

0
nuprogrammer napisał(a):

(...)

 
<div th:each="project : ${projects}">
    <div th:text="${project.name}"></div>
    <div th:each="task : ${projects.task}">
        <div th:text="${task.name}"></div>
    </div>
</div>

W drugiej pętli masz: <div th:each="task : ${projects.task}"> powinno być <div th:each="task : ${project.task}">.
Jakbyś chciał co-nieco podejrzeć projekt w technologiach, których używasz to możesz przejrzeć projekt prostego forum (Spring Boot + Security, thymeleaf) https://github.com/Marszal/myforum

0

Sorry literówka była faktycznie, bo źle skopiowałem. Problem w tym, że jak dam:

<div th:each="task : ${project.task}">
        <div th:text="${task.name}"></div>
    </div>
 

to nie wyświetlają mi się żadne zadania.

0

Zamiast wywołania metody findProjectsWithTasks() powinno wystarczyć wywołanie findAll().
Edit: findAll() nie polecam jednak, bo przy iterowaniu powstanie N+1 problem ;).
Popraw sobie @Query, coś w ten deseń:

SELECT p FROM Project p JOIN FETCH p.task

1 użytkowników online, w tym zalogowanych: 0, gości: 1