Book.java
package pl.spring.guru.spring5webapp.model;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String title;
private String isbn;
@OneToOne
private Publisher publisher;
@ManyToMany
@JoinTable(name = "author_book", joinColumns = @JoinColumn(name =
"book_id"), inverseJoinColumns = @JoinColumn(name = "author_id"))
private Set<Author> authors = new HashSet<>();
public Book() {
}
public Book(String title, String isbn, Publisher publisher){
this.title=title;
this.isbn=isbn;
this.publisher=publisher;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public Publisher getPublisher() {
return publisher;
}
public void setPublisher(Publisher publisher) {
this.publisher = publisher;
}
public Set<Author> getAuthors() {
return authors;
}
public void setAuthors(Set<Author> authors) {
this.authors = authors;
}
}
BookController.java
package pl.spring.guru.spring5webapp.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pl.spring.guru.spring5webapp.repositories.BookRepository;
@Controller
public class BookController {
private BookRepository bookRepository;
public BookController(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
@RequestMapping(value = "/books")
public String getBooks(Model model){
model.addAttribute("books",bookRepository.findAll());
return "books";
}
}
books.html - шаблон thymeleaf
<!DOCTYPE html>
<html lang="en" xmlns:th=”http://www.thymeleaf.org”>
<head>
<meta charset="UTF-8">
<title>Spring Framework Guru</title>
</head>
<body>
<h1>Books list</h1>
<table>
<tr>
<th>ID</th>
<th>Title</th>
<th>Author</th>
</tr>
<tr th:each="book : ${books}">
<td th:text="${book.id}">123</td>
<td th:text="${book.title}">Spring in Action</td>
<td th:text="${book.publisher.name}">Wrox</td>
</tr>
</table>
</body>
</html>
, когда я пытаюсь перейти на localhost/ books я получаю
Исключение при оценке выражения SpringEL: "book.id" (шаблон: "books" - строка 16, столбец 13)
Я простоизучая весну, и я начинаю использовать учебное пособие для гуру рамок весны.Я тоже не понимаю, зачем добавлять пустой конструктор в book.java.Без этого у меня есть следующая проблема:
Нет конструктора по умолчанию для объекта:: pl.spring.guru.spring5webapp.model.Book;вложенным исключением является org.hibernate.InstantiationException: нет конструктора по умолчанию для сущности:: pl.spring.guru.spring5webapp.model.Book