Не добавляется сущность в базу данных

Рейтинг: 0Ответов: 0Опубликовано: 18.05.2023

Пытаюсь добавить через форму пользователя в базу данных, но он не добавляется. Вот мой код и трейсбек:

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;}
}

введите сюда описание изображения

Ответы

Ответов пока нет.