POST REST-запрос, включающий отображение внешнего ключа OnToMany - PullRequest
0 голосов
/ 25 марта 2019

Я новичок в Springboot. Я пытаюсь реализовать простой REST API, используя: -Springboot, JPA и отдых вместе с гибернацией

У меня есть 2 таблицы базы данных, записная книжка, которая содержит от 1 до многих заметок Я уже настроил 2 таблицы и отношения. Я также создал NotebookRepository и NoteRepository, чтобы получить базовые операции CRUD через остальную часть Springboot. Соединение с базой данных и отношения функционируют но я не знаю, как добавить новую заметку (у нее есть внешний ключ notebook_id, который не равен NULL), и каждый раз я пытаюсь опубликовать что-то подобное
{ «Название:» а», «Текст»: «все», "ноутбук":{ "Идентификатор": 2 } }
я получаю эту ошибку: Вызвано: java.sql.SQLIntegrityConstraintViolationException: столбец 'notebook_id' не может быть пустым

@Entity
@Table(name="notebook")
public class NoteBook {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="name")
    private String name;

    @OneToMany(mappedBy="notebook", cascade=CascadeType.ALL)
    List<Note> notes;

    public NoteBook() {

    }

    public NoteBook(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Note> getNotes() {
        return notes;
    }

    public void setNotes(List<Note> notes) {
        this.notes = notes;
    }

    public void addNote(Note note) {
        if(notes == null) {
            notes = new ArrayList<>();
        }
        note.setNotebook(this);
        notes.add(note);
    }

@Entity
@Table(name="note")
public class Note {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="title")
    private String title;

    @Column(name="text")
    private String text;

    @ManyToOne(cascade={CascadeType.MERGE, CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH})
    @JoinColumn(name="notebook_id")
    private NoteBook notebook;

    public Note() {

    }

    public Note(String title, String text) {
        this.title = title;
        this.text = text;
    }

@RepositoryRestResource(collectionResourceRel = "note", path = "notes")
public interface NoteRepository extends JpaRepository<Note, Integer>{
    //No code...
}

@RepositoryRestResource(collectionResourceRel = "notebook", path = "notebooks")
public interface NotebookRepository extends JpaRepository<NoteBook, Integer>{

}

1 Ответ

0 голосов
/ 25 марта 2019

Я думаю, вам нужно добавить referencedColumnName = "id" для аннотации JoinColumn для поля ноутбука в классе Note.

Возможно, у вас проблема с типом генерации IDENTITY. См. эту проблему с нулевым указателем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...