Не добавляется сущность в базу данных
Пытаюсь добавить через форму пользователя в базу данных, но он не добавляется. Вот мой код и трейсбек:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import project.dashboard.models.Role;
import project.dashboard.models.User;
import project.dashboard.repos.IUserRepository;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
public class UserService implements UserDetailsService {
private final IUserRepository userRepository;
@Autowired
public UserService (IUserRepository value) {
userRepository = value;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User myUser = userRepository.findByNickname(username);
return new org.springframework.security.core.userdetails.User(myUser.getNickname(),
myUser.getPassword(), mapRolesToAuthorities(myUser.getRoles()));
}
private List<? extends GrantedAuthority> mapRolesToAuthorities(Set<Role> roles)
{
return roles.stream().map(r -> new SimpleGrantedAuthority("ROLE_" + r.name())).collect(Collectors.toList());
}
public void addUser(User user) throws Exception
{
User userFromDb = userRepository.findByNickname(user.getNickname());
if (userFromDb != null) {
throw new Exception("user exists");
}
user.setRoles(Collections.singleton(Role.USER));
userRepository.save(user);
}
}
import project.dashboard.models.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface IUserRepository extends JpaRepository<User, Long> {
User findByNickname(String username);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import project.dashboard.models.User;
import project.dashboard.services.UserService;
@Controller
public class AuthController {
private final UserService userService;
@Autowired
public AuthController( UserService userService)
{ this.userService = userService; }
@GetMapping("/registration")
public String registration()
{
return "registration";
}
@PostMapping("/registration")
public String addUser(User user, Model model)
{
try
{
userService.addUser(user);
return "redirect:/login";
}
catch (Exception ex)
{
model.addAttribute("message", "User exists");
ex.printStackTrace();
return "registration";
}
}
}
Properties:
spring.datasource.url=jdbc:postgresql://localhost/.....
spring.datasource.username=postgres
spring.datasource.password=12345
spring.jpa.generate-ddl=true
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
import jakarta.persistence.*;
import project.dashboard.internal.ArgumentGuard;
import project.dashboard.internal.FileManager;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long id;
@Column(name = "nickname")
private String nickname;
@Column(nullable = false, unique = true)
private String email;
@Column(name = "password")
private String password;
@ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
@Enumerated(EnumType.STRING)
private Set<Role> roles = new HashSet<>();
// Конструкторы, геттеры и сеттеры
public User() {}
public Long getId() { return id; }
public String getNickname() {
return nickname;
}
public String getEmail() {
return email;
}
public String getPassword() { return password; }
public Set<Role> getRoles() { return roles; }
public void setNickname(String value) throws IllegalArgumentException {
ArgumentGuard.assertStringNotNullOrEmpty(value);
nickname = value;
}
public void setEmail(String value) throws IllegalArgumentException {
ArgumentGuard.assertEmailIsValid(value);
email = value;
}
public void setRoles(Set<Role> value) {
roles = value;
}
public void setPassword(String value) { password = value;}
}
Источник: Stack Overflow на русском