Here is my user_answer entity:
package com.example.demo.entities;
import org.junit.ClassRule;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
@Entity
@Table(name = "user_answer")
public class UserAnswer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long device_id;
    private Integer quiz_id;
    private String questionNum;
    private String answerNum;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
// 0, 1, 2, 3, 4 corresponding to A, B, C, D, E
    public Long getDevice_id() {
        return device_id;
    }
    public void setDevice_id(Long device_id) {
        this.device_id = device_id;
    }
    public long getQuiz_id() {
        return quiz_id;
    }
    public void setQuiz_id(Integer quiz_id) {
        this.quiz_id = quiz_id;
    }
    public String getQuestionNum() {
        return questionNum;
    }
    public void setQuestionNum(String questionNum) {
        this.questionNum = questionNum;
    }
    public String getAnswerNum() {
        return answerNum;
    }
    public void setAnswerNum(String answerNum) {
        this.answerNum = answerNum;
    }
}
Here is where I did saving:
@RequestMapping("/test")
    public String viewTest(@ModelAttribute UserAnswer answer, @AuthenticationPrincipal CustomUserDetails userDetails,
                           HttpSession session, @RequestParam(name = "q", required = false, defaultValue = "0") String qNum,
                           @RequestParam(name = "id", required = false, defaultValue = "1") String quizID, Model model,
                           HttpServletRequest req) {
        int index = Integer.parseInt(qNum) + 1;
        JSONObject question = (JSONObject) HttpController.GetQuestion(quizID, qNum);
        if (question != null) {
            model.addAttribute("problem", question.get("problem"));
            model.addAttribute("answer0", question.get("answer0"));
            model.addAttribute("answer1", question.get("answer1"));
            model.addAttribute("answer2", question.get("answer2"));
            model.addAttribute("answer3", question.get("answer3"));
            model.addAttribute("url", "/test?id=" + quizID + "&q=" + (index));
            model.addAttribute("qNum", "" + index);
            UserAnswer userAnswer = (UserAnswer) session.getAttribute("user_answer");
            if (userAnswer != null) {
                String previousQuesiton = userAnswer.getQuestionNum();
                System.out.println("Previous question: " + previousQuesiton);
                String previousAnswer = userAnswer.getAnswerNum();
                if (previousAnswer == null) {
                    previousAnswer = "";
                }
                System.out.println("Previous answer: " + previousAnswer);
                String newQuestion = qNum;
                String newAnswer = answer.getAnswerNum();
                newQuestion = previousQuesiton + newQuestion;
                System.out.println("New question: " + newQuestion);
                newAnswer = previousAnswer + newAnswer;
                System.out.println("New answer: " + newAnswer);
                answer.setAnswerNum(newAnswer);
                answer.setQuiz_id(Integer.parseInt(quizID));
                answer.setQuestionNum(newQuestion);
                req.getSession().setAttribute("user_answer",answer);
                return "test.html";
            } else
                answer.setQuestionNum(qNum);
                req.getSession().setAttribute("user_answer",answer);
                return "test.html";
        } else {
//            Cookie[] cookies = req.getCookies();
//            UserAnswer userAnswer = (UserAnswer) req.getSession().getAttribute("user_answer");
//            String previousAnswer = userAnswer.getAnswerNum();
//            String newAnswer = previousAnswer + answer.getAnswerNum();
//            userAnswer.setAnswerNum(newAnswer);
            if (userDetails != null) {
                UserAnswer userAnswer = (UserAnswer) req.getSession().getAttribute("user_answer");
                String previousAnswer = userAnswer.getAnswerNum();
                String newAnswer = previousAnswer + answer.getAnswerNum();
                userAnswer.setAnswerNum(newAnswer);
                System.out.println("user login");
                userAnswer.setDevice_id(userDetails.getDeviceID());
                userAnswerRepository.save(userAnswer);
            } else{
                UserAnswer not_login_userAnswer = (UserAnswer) req.getSession().getAttribute("user_answer");
                String previousAnswer = not_login_userAnswer.getAnswerNum();
                String newAnswer = previousAnswer + answer.getAnswerNum();
                not_login_userAnswer.setAnswerNum(newAnswer);
                Long deviceID = getCookie(req);
                not_login_userAnswer.setDevice_id(deviceID);
                userAnswerRepository.save(not_login_userAnswer);
            }
            req.getSession().removeAttribute("user_answer");
            System.out.println("Question not found");
            // go to results page
            return "ThankForTakingTest.html";
        }
    }
Here is my propertie file:
spring.jpa.hibernate.ddl-auto= update
The implementation that I want is:
- When I finish the quiz, I want to save all the answers and questions number inside user_answer database with a device id for guest user. Moreover, inside user_answer table it also have their own id too, the reason why I did this, because I want to make sure that when new user come to do my quiz they will have their new device_id and when they finish with all their question, all their answers will save in user_answer.
