Данные сохраняться только после перезагрузки сервера
Всем привет. Кто может помочь почему данные сохраняются в БД только после перезагрузки сервера
У меня есть простой контроллер
@PostMapping("/saveUserAnswers")
public String saveUserAnswers(@RequestParam(name = "queryAnswers[]") Set<Answers> answers,
@RequestParam(name = "userID") User user) {
Set<Answers> userAnswers = user.getAnswers();
for (Answers a : answers) {
userAnswers.add(a);
}
user.setAnswers(userAnswers);
userRepository.save(user);
return "redirect:/allQuestionnaire";
}
Два entity которые соединены связью Многие ко Многим
User
@Entity
@Table(name = "q_user")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "active")
private boolean active;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "user_answers",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "answers_id"))
private Set<Answers> answers = new HashSet<>();
@ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
@Enumerated(EnumType.STRING)
private Set<Role> roles;
public User() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return isActive();
}
public void setUsername(String username) {
this.username = username;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return getRoles();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
public Set<Answers> getAnswers() {
return answers;
}
public void setAnswers(Set<Answers> answers) {
this.answers = answers;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return active == user.active && Objects.equals(id, user.id) && Objects.equals(username, user.username) && Objects.equals(password, user.password) && Objects.equals(roles, user.roles);
}
@Override
public int hashCode() {
return Objects.hash(id, username, password, active, roles);
}
}
Answers
package com.example.Questionnaire.entity;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.Hibernate;
import javax.persistence.*;
import java.util.*;
@Getter
@Setter
@Entity
@Table(name = "answers")
public class Answers {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
private Question question;
@ManyToMany(mappedBy = "answers")
private List<User> users = new ArrayList<>();
public Answers() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
Answers answers = (Answers) o;
return id != null && Objects.equals(id, answers.id);
}
@Override
public int hashCode() {
return getClass().hashCode();
}
}
Ну и на всякий случай HTML с формой
<h1>Название опроса - ${questionnaire.name}</h1>
<form action="/saveUserAnswers" method="POST">
<input type="hidden" value="${_csrf.token}" name="_csrf"/>
<#list qam as key,value>
<ul class="list-group" >
<li class="list-group-item">
<p class="question-lead"> ${key.getName()}</p>
<ul>
<#list value as val>
<li>
<div class="form-check">
<input class="form-check-input answers-input" type="checkbox" name="queryAnswers[]" value="${val.id}"/>
<label class="form-check-label" style="font-size: 22px">
${val.getName()}
</label>
</div>
</li>
</#list>
</ul>
</li>
</ul>
</#list>
<input type="hidden" name="userID" value="${user.id}">
<input class="save_button" type="submit" value="Ответить">
</form>
После перезагрузки сервера данные добаловаться и эта проблема только в этом методе