Hej.
Próbuję stworzyć bazę danych która będzie przechowywać sekwencje stron (page) dla kursu (course), jednak przy dodawaniu page wyrzuca mi:
Parameter value [5] did not match expected type [web.javaLearn.model.course.Course (n/a)]
Mam zapisane dwie encje w ten sposób:
Page:
@Data
@Entity
@Builder
public class Page {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Float pageOrder;
@Enumerated(EnumType.STRING)
private PageType type;
private String data;
@ManyToOne(cascade = CascadeType.ALL)
private Course course;
}
Course:
@Data
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String description;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "course")
List<Page> pageList;
}
Repozytorium page:
@Repository
public interface PageRepository extends JpaRepository<Page, Long> {
@Query(value = "SELECT * FROM page WHERE course_id = ?1 ORDER BY page_order", nativeQuery = true)
List<Page> findAllPagesByCourse(Long courseId);
Page findFirstByCourseOrderByPageOrderDesc(Long courseId);
}
Moja funkcja w serwisie w której zapisuję stronę do repozytorium wygląda tak:
@Transactional
public Page savePage(PageRequest pageRequest, Long courseId) {
Course c = courseRepository.findById(courseId).orElseThrow();
Page p = Page.builder()
.name(pageRequest.getName())
.pageOrder(pageRepository.findFirstByCourseOrderByPageOrderDesc(courseId).getPageOrder()+1)
.type(pageRequest.getType())
.data(pageRequest.getData())
.course(c)
.build();
pageRepository.save(p);
return p;
}
Niby Course c = courseRepository.findById(courseId).orElseThrow(); zwraca mi poprawny obiekt Course, więc o co może chodzić?