Witam. Próbuję zrobić projekt springowy, w którym możliwe będzie tworzenie egzaminów z pytań wraz z dostępnymi odpowiedziami. Klasa Answer wygląda tak:
@Entity
@Table(name = "answers")
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
String content;
boolean isTrue;
@ManyToOne
@JoinColumn(name = "questionId")
private Question question;
A klasa Question wygląda tak:
@Entity
@Table(name = "questions")
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String description;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "question")
private Set<Answer> answers;
Migracja:
create table Exams(
id int primary key auto_increment
)
create table Questions(
id int primary key auto_increment,
qstContent varchar(100) not null
)
create table Answers(
id int primary key auto_increment,
content varchar(100) not null,
isTrue bit,
questionId int not null,
foreign key (questionId) join Questions(id)
)
Metoda w kontrolerze:
@PostMapping("/questions")
public ResponseEntity<Question> createQuestion(@RequestBody Question toCreate) throws Exception {
Question question = repository.save(toCreate);
if (toCreate == null) {
throw new Exception();
} else {
return new ResponseEntity<>(toCreate, HttpStatus.CREATED);
}
}
JSon, który wysyłam:
{
"description": "jakiś opis",
"answers": [{"content": "treść odpowiedzi", "isTrue": false},{"content": "treść odpowiedzi2", "isTrue": true}]
}
W bazie danych zostają zapisane pytania i odpowiedzi, ale odpowiedzi nie mają klucza zewnętrznego identyfikującego je z pytaniem. W sumie jak patrzę na kod to jest to nawet jasne, bo próbowałem całość tworzyć przez analogię do innego projektu. Ktoś mógłby mi jednak podpowiedzieć jak to naprawić, żeby odpowiedź zawierała prawidłowy klucz zewnętrzny? Ponadto podejrzewam, że tworzenie ID dla klasy Answer jest również nienajlepsze, tzn dodając pytanie z dwoma odpowiedziami, pytanie będzie miało klucz 1, a odpowiedzi kolejno 2 i 3.