Добавление и дальнейшая работа в SQL, когда один из параметров - Класс
Изучаю принципы и сам процесс работы с базами данных (SQL - для начала). Интересен вопрос, что если у меня есть две таблицы Books и Authors. И таких же два простых класса для дальнейшего создания экземпляров этого класса..
public class Book {
private String nameOfBook = "";
private Author author = null;
private Data.Genre genre;
private String description = "";
public Book(String nameOfBook, Author author, Data.Genre genre, String description) {
this.nameOfBook = nameOfBook;
this.author = author;
this.genre = genre;
this.description = description;
}
//getters and setter..
}
package com.company;
import java.time.LocalDate;
public class Author {
private String firstName = "";
private String lastName = "";
private LocalDate dateOfBirth;
public Author(String firstName, String lastName, LocalDate dateOfBirth) {
this.firstName = firstName;
this.lastName = lastName;
this.dateOfBirth = dateOfBirth;
}
//getters and setter...
}
Так вот, у меня есть стандартная, уже подключенная ДБ, и две таблицы в ней: Books и Authors. Проблем с отправкой и получением данных в таблицу новых Author'ов - нет, но что насчёт Books, так как там один из параметров сам класс Author. Надеюсь вы поняли моё скудное объяснение, за что прошу прощения, и сразу благодарю за любой фидбэк.
Приветствую любые вопросы и уточнения )
Ответы (1 шт):
В БД создайте в таблице Author (да и в Book тоже) поле id типа целое, но чтобы оно автоматически генерировалось уникальное, когда при вставке в БД вы это поле не указываете (в mysql это можно сделать добавив ключевое слово AUTO_INCREMENT в определение поля, в postgresql задав тип поля serial).
Так же нужно добавить это поле в класс Author.
Теперь при создании записи в Author он будет автоматически получать уникальный идентификатор. В таблицу Book создайте поле author_id и там храните идентификатор автора (т.е. значение из поля id в таблице Author). Для этого поля нужно также добавить foreign key ограничение, чтобы БД проверяла, что вы задаете правильное значение для поля (т.е. такое которое существует в Author).
При вставке в таблицу Book, берите значение book.getAuthor().getId(), и его используйте для того, чтоб задать значение в поле author_id. При чтении объекта Book из БД, либо делайте дополнительный запрос к таблице Author по id из поля author_id и присваивайте полученный таким образом объект Author в поле Book.author. Так же можно получить поля автора используя join.