Консолидация отношений один-ко-многим в Thymeleaf - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь закрепить отношения «один ко многим» с помощью Thymeleaf. Давайте будем простыми. У меня есть thiesis У thiesis есть несколько вопросов.

@Entity
public class Thiesis {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="thiesis")
    private Set<Question> questions = new HashSet<>();

    @ManyToOne(cascade=CascadeType.ALL)
    private Course course;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdAt;
}

И класс вопросов:

@Entity
public class Question {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;
  private String question;
  @ManyToOne(cascade=CascadeType.ALL)
  private Thiesis thiesis;
}

А вот контроллер для сохранения thiesis:

@PostMapping("/teacher/{userId}")
public String addThiesis(@PathVariable Long userId, Thiesis thiesis,String name)
{
    thiesisService.save(thiesis, name);
    System.out.println(thiesis.getId());
    return "redirect:/teacher/" + userId.toString();
}

Также служба для Thiesis:

public Thiesis save(Thiesis thiesis, String name)
{
    Course course =courseRepo.findByName(name);
    if(course!=null) {
        thiesis.setCourse(course);
        for(Question question : thiesis.getQuestions()) {
            question.setThiesis(thiesis);
            questionService.save(question);
        }
        Date date = new Date();
        thiesis.setCreatedAt(new Timestamp(date.getTime()));

        return thiesisRepo.save(thiesis);

    }
    else {
        System.out.println("Couldn't save the thiesis");
        return null;
    }

Thymeleaf:

<form action="" th:object="${thiesis}"method="post">
    <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" required/>
    <div class="form-group row" id="course_id">
        <label for="pyetja_1" class="col-12 col-sm-4 col-form-label">Pyetje:</label>
        <div class=" col-12 col-sm-8">  
            <input type="text" class="form-control" placeholder="Emri i Lendes..." th:field="*{course.name}" required/><br/>
        </div>                      
    </div>
</form>

Но результат не попадает в базу данных, и в ответ я получаю ошибку 403, когда Я выполняю метод POST. Возможно, проблема в том, как я заполняю поля объекта в тимелисте. Я действительно застрял, и я пробовал тысячи способов, и я не имею дело с этим. Любая помощь очень ценится.

1 Ответ

1 голос
/ 03 февраля 2020

Из того, что я вижу и понимаю из ваших соглашений об именах, возможно, вы путаете ситуацию с сопоставлениями. Это должно произойти в этих ситуациях. Размещенный код должен также включать @GetMapping, но в любом случае убедитесь, что @GetMapping указывает на это представление, а @PostMapping получает информацию из этого представления по указанному пути, на который вы ссылаетесь.

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