@OneToMany SpringBoot

0

Witam serdecznie, siedzę z tym problemem już od dłuższej chwili, i nie mogę sobie poradzić :

@Entity
public class Book {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id; 
    
    @ManyToOne
    @JoinColumn(name = "authorId")    <--- nasz klucz obcy, upewniałem się, że w bazie danych jest ta sama nazwa
    private Author author;
    
    @Column(name = "title")
    private String title;
    
    @Column(name = "pages")
    private long pages;

    @Column(name = "available")
    private boolean available;
 
    
    
    public long getId() {
        return id;
    }

    public Author getAuthor() {
        return author;
    }

    
    public String getTitle() {
        return title;
    }

    public long getPages() {
        return pages;
    }

    public boolean isAvailable() {
        return available;
    }

     
    public void setAuthor(Author author) {
        
        this.author = author;
    }
    
    public void setIsAvailable(boolean available) {
        this.available = available;
    }
    
}
@Entity
public class Author {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    @NotNull
    @Column(name = "firstName")
    private String firstName;
    
    @NotNull
    @Column(name = "lastName")
    private String lastName;
    
    @OneToMany(mappedBy = "author") //name field from book.java
    private List <Book> listOfBooks =  new ArrayList<>();

    public long getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public List<Book> getListOfBooks() {
        return listOfBooks;
    }
    
    
}

Oto jaki dodaje wyjątek przy odpaleniu adresu url z controllera :

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'book0_.id' in 'field list'

Przewertowałem stackoverflowa, nic nie pomaga. Oglądałem tutki na youtubie, i nic. Jestem już trochę sfrustrowany, ale nie chcę żeby przerosła mnie relacja OneToMany, czy ktoś z Was ma jakieś propozycję.

Pozdrawiam, i z góry dzięki :)

0

Ale chcesz taki quick-fix? Wywal wszystkie @JoinColumn oraz @Column.

0

Pokaż cały kod jak masz gita.
Jak dodajesz książkę na listę do autora to pamiętasz o zapisaniu polu author w obiekcie Book?

0

@Shalom nic się niestety nie zmieniło po zakomentowaniu adnotacji.
@mariusz_s niestety, nie potrafię obsługiwać gita(tzn. lenistwo)
Mogę napisać tylko, że warstwa DAO to rozszerzenie

JpaRepository<Book, Long>

Controller :

    @RequestMapping(value = "/allBooks", method = RequestMethod.GET)
    public String showAllBooks (Model model) {
        
        model.addAttribute("allBooksFromModel", bookRepository.findAll());
        
        return "allBooks";
    }

i widok w jsp (proszę nie sugerować się tym, że jest tu syf, chciałem sprawdzić czy działa, i generować widok za pomocą thymeleaf)

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>All books in our library</title>
    </head>
    <body>

<c:forEach items="${allBooksFromModel}" var="book">
                <tr>   
                <td>${book.id}</td>>
                <td>${book.title}</td>
                <td>${book.pages}</td>
                </tr>
            </c:forEach>

</body>
</html>            

0

I na pewno zrobiłeś create-drop po tych zmianach? A jakie zapytanie wykonujesz?
A i przeoczyłem oczywiście że po stronie Many masz mieć Set a nie List! Inaczej prosisz się o problemy...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.