在我的应用程序中,我在更新我的帐户时遇到了麻烦,请建议吗?

发布于 2025-02-11 22:19:30 字数 24138 浏览 0 评论 0原文

IM构建了到目前为止仅着重于与JPA存储库相互作用的相互作用的CRUD操作的应用程序,以将信息保存到MySQL中持有的数据库中。试图更新ACCOUTN时,我会收到以下错误

java.lang.UnsupportedOperationException: null
    at java.base/java.util.AbstractList.remove(AbstractList.java:167) ~[na:na]
    at java.base/java.util.AbstractList$Itr.remove(AbstractList.java:387) ~[na:na]
    at java.base/java.util.AbstractList.removeRange(AbstractList.java:598) ~[na:na]
    at java.base/java.util.AbstractList.clear(AbstractList.java:243) ~[na:na]
    at org.hibernate.type.CollectionType.replaceElements(CollectionType.java:580) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.type.CollectionType.replace(CollectionType.java:757) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.type.TypeHelper.replace(TypeHelper.java:167) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:450) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:205) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:178) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:70) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:829) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:816) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362) ~[spring-orm-5.3.20.jar:5.3.20]
    at jdk.proxy4/jdk.proxy4.$Proxy111.merge(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.20.jar:5.3.20]
    at jdk.proxy4/jdk.proxy4.$Proxy111.merge(Unknown Source) ~[na:na]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:669) ~[spring-data-jpa-2.7.0.jar:2.7.0]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:639) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[spring-data-jpa-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.20.jar:5.3.20]
    at jdk.proxy4/jdk.proxy4.$Proxy115.save(Unknown Source) ~[na:na]
    at com.example.realtyKing.Service.UserServiceImpl.updateUser(UserServiceImpl.java:100) ~[classes/:na]
    at com.example.realtyKing.Controller.UserController.update(UserController.java:210) ~[classes/:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]

我的用户模型

import lombok.*;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;
import java.sql.Date;
import java.util.*;

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "first_name", nullable = false)
    private String firstName;

    @Column(name = "last_name", nullable = false)
    private String lastName;
    @Column(nullable = false)
    private Date dob;
    @Column(name = "phone_number", nullable = false)
    private String phoneNumber;


    private String email;
    private String password;

    @Column(name = "email_config")
    private String emailConfig;
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(
                    name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(
                    name = "role_id", referencedColumnName = "id"))

    private Collection < Role > roles;
    public User(String firstName, String lastName,Date dob,String phoneNumber, String email, String password, Collection < Role > roles) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.dob = dob;
        this.phoneNumber=phoneNumber;
        this.email = email;
        this.password = password;
        this.roles = roles;
    }
    public void urdToUser(UserRegistrationDto urd){
        setFirstName(urd.getFirstName());
        setLastName(urd.getLastName());
        setDob(urd.getDob());
        setPhoneNumber(urd.getPhoneNumber());
        setEmail(urd.getEmail());
        setPassword(urd.getPassword());
    }
}

import com.example.realtyKing.Model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long>{
    User findByEmail(String email);
    User findByPassword(String password);
    void deleteById(long id);
    User findById(long id);
}

我的用户我的服务

import com.example.realtyKing.Model.UserRegistrationDto;
import com.example.realtyKing.Model.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import java.util.List;

public interface UserService extends UserDetailsService{
    List < User > getAllUsers();
    User getUserById(long id);
    void deleteById(long id);
    User save(UserRegistrationDto registrationDto);
    User getUserByEmail(String email);
    User getUserByPassword(String password);
    void updateUser(User user);
}

import java.util.List;

import java.util.Arrays;
import java.util.Collection;
import java.util.stream.Collectors;

import com.example.realtyKing.Model.UserRegistrationDto;
import com.example.realtyKing.Model.Role;
import com.example.realtyKing.Model.User;
import com.example.realtyKing.Repositories.UserRepository;
import com.example.realtyKing.Utility.MiscleaniousServices;

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.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {


    private UserRepository userRepository;
    @Autowired
    MiscleaniousServices miscleaniousServices;
    @Autowired
    public void setUserRepository (UserRepository  userRepository) {
        this.userRepository= userRepository;
    }

    public UserServiceImpl(UserRepository userRepository) {
        super();
        this.userRepository = userRepository;
    }

    @Override
    public List <User> getAllUsers() {
        return userRepository.findAll();
    }

    @Override
    public User getUserById(long id) {
        User user= this.userRepository.findById(id);

        return user;
    }

    @Override
    public void deleteById(long id) {
        this.userRepository.deleteById(id);
    }
    @Override
    public User save(UserRegistrationDto registrationDto) {
        User user = new User(registrationDto.getFirstName(),registrationDto.getLastName(),
                registrationDto.getDob(),registrationDto.getPhoneNumber(),registrationDto.getEmail(),
                miscleaniousServices.bCryptPasswordEncoder().encode(registrationDto.getPassword()), Arrays.asList(new Role("ROLE_USER")));

        return userRepository.save(user);
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User user = userRepository.findByEmail(username);
        if(user == null) {
            throw new UsernameNotFoundException("Invalid username or password.");
        }
        return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), mapRolesToAuthorities(user.getRoles()));
    }

    private Collection<? extends GrantedAuthority> mapRolesToAuthorities(Collection<Role> roles){
        return roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList());
    }

    @Override
    public User getUserByEmail(String email){
        User user = userRepository.findByEmail(email);
        if(user!=null)
        {
            return user;
        }
        return null;
    }

    @Override
    public User getUserByPassword(String password){
        User user = userRepository.findByPassword(password);
        if(user!=null)
        {
            return user;
        }
        return null;
    }
    @Override
    public void updateUser(User user){
                user.setPassword(miscleaniousServices.bCryptPasswordEncoder().encode(user.getPassword()));
                user.setRoles(Arrays.asList(new Role("ROLE_USER")));
                userRepository.save(user);
    }
}

我的服务我控制器请注意,请求将发布更新

import com.example.realtyKing.Model.Mail;
import com.example.realtyKing.Model.UserAuthentification;
import com.example.realtyKing.Model.User;
import com.example.realtyKing.Model.UserRegistrationDto;
import com.example.realtyKing.Service.EmailService;
import com.example.realtyKing.Service.UserService;
import com.example.realtyKing.Utility.MiscleaniousServices;
import com.example.realtyKing.Utility.UserCreationValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import java.util.Locale;

//fix the id problem.

@Controller
public class UserController {
    @Autowired
    private EmailService emailService;


    @Autowired
    private UserService userService;

    @Autowired
    MiscleaniousServices miscleaniousServices;

    @Autowired
    private UserCreationValidator userCreationValidator;

    @ModelAttribute("user")
    public UserRegistrationDto userRegistrationDto() {
        return new UserRegistrationDto();
    }

    @GetMapping("/registration")
    public String userAuthentificationForm(Model model)
    {
        model.addAttribute("firstNameError", "");
        model.addAttribute("lastNameError", "");
        model.addAttribute("dobError", "");
        model.addAttribute("phoneNumberError", "");
        model.addAttribute("emailError", "");
        model.addAttribute("passwordError", "");
        model.addAttribute("user", miscleaniousServices.user());
        return "new_user";
    }
    //finsihed user sighnup
    @PostMapping("/registration")
    public String userAuthentificationForm(@ModelAttribute("user") UserRegistrationDto registrationDto,
                                           BindingResult bindingResult,Model model) {
        userCreationValidator.validate(registrationDto,bindingResult,false);

        if (bindingResult.hasErrors()) {

            String emailError="";
            String dobError="";
            String phoneNumberError="";
            String firstNameError ="";
            String lastNameError="";
            String passwordError="";

            userFilter(emailError, dobError, phoneNumberError,
                    firstNameError , lastNameError, passwordError,bindingResult);

            model.addAttribute("firstNameError", firstNameError);
            model.addAttribute("lastNameError", lastNameError);
            model.addAttribute("dobError", dobError);
            model.addAttribute("phoneNumberError", phoneNumberError);
            model.addAttribute("emailError", emailError);
            model.addAttribute("passwordError", passwordError);

            model.addAttribute("User", miscleaniousServices.user());

            return "new_user";
        }

        userService.save(registrationDto);
        return "redirect:/login";
    }
    //fixed get login.
    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/")
    public String home() {
        return "index";
    }
    @GetMapping("/deleteConfirmation")
    public String deleteConfirmation(Model model){
        UserAuthentification ua=new UserAuthentification();
        model.addAttribute("errors","");
        model.addAttribute("UserAuthentification",ua);
        return "delete_confirmation.html";
    }
    @PostMapping("/delete")
    public String delete(@ModelAttribute("UserAuthentification") UserAuthentification userAuthentification
            ,Model model) throws Exception {
           if(userAuthentification.getUsername().equals("")){
               model.addAttribute("email", "");
               model.addAttribute("errors","Invalid username or password.");
               return "delete_confirmation.html";
           }
           User user=null;

           try{
               user=userService.getUserByEmail(userAuthentification.getUsername());
                }
           catch(Exception e){

           }
           if(user==null){
               model.addAttribute("email", " ");
               model.addAttribute("errors","Invalid username or password.");
               return "delete_confirmation.html";
           }
           if(! miscleaniousServices.bCryptPasswordEncoder().matches(userAuthentification.getPassword(), user.getPassword())){
               model.addAttribute("email", user.getEmail());
               model.addAttribute("errors","Invalid username or password.");
               return "delete_confirmation.html";
           }
           userService.deleteById(user.getId());

           return "redirect:/logout";
       }
    @GetMapping("/forgotPassword")
    public String forgotPassword(Model model){
        User user=new User();
        model.addAttribute("user", user);
        model.addAttribute("confirmation", "");
        return "forgot_password";
    }
    @PostMapping("/forgotPassword")
    public String forgotPassword(@ModelAttribute("User") User user,Model model) {


        try{
            user=userService.getUserByEmail(user.getEmail());
            Mail mail = new Mail();
            mail.setFrom("[email protected]");//replace with your desired email
            mail.setMailTo(user.getEmail());//replace with your desired email

            emailService.remeberPassword(user,mail);
        }
        catch(Exception e)
        {
            model.addAttribute("User", user);
            model.addAttribute("confirmation", "their was a problem.");
            return "forgot_password";
        }

        model.addAttribute("User", user);
        model.addAttribute("confirmation", "email sent"+
                " password soon");
        return "forgot_password";
    }
    @GetMapping("update")
    public String update(Model model){
        User user=userService.getUserByEmail(miscleaniousServices.getUsername());
        UserRegistrationDto urd=new UserRegistrationDto();
        urd.userToUrd(user);
        model.addAttribute("firstNameError", "");
        model.addAttribute("lastNameError", "");
        model.addAttribute("dobError", "");
        model.addAttribute("phoneNumberError", "");
        model.addAttribute("emailError", "");
        model.addAttribute("passwordError", "");
        model.addAttribute("user", user);
        model.addAttribute("message", " ");
        return "update";
    }
        @PostMapping("update")
        public String update(@ModelAttribute("user") UserRegistrationDto registrationDto,
                BindingResult bindingResult,Model model) {
            userCreationValidator.validate(registrationDto,bindingResult,true);

            if (bindingResult.hasErrors()) {

                String emailError="";
                String dobError="";
                String phoneNumberError="";
                String firstNameError ="";
                String lastNameError="";
                String passwordError="";

                userFilter(emailError, dobError, phoneNumberError,
                        firstNameError , lastNameError, passwordError,bindingResult);


                model.addAttribute("firstNameError", firstNameError);
                model.addAttribute("lastNameError", lastNameError);
                model.addAttribute("dobError", dobError);
                model.addAttribute("phoneNumberError", phoneNumberError);
                model.addAttribute("emailError", emailError);
                model.addAttribute("passwordError", passwordError);
                model.addAttribute("message", "your account has not been succesfully updated.");
                model.addAttribute("User", registrationDto);

                return "update";
            }
            User user=userService.getUserByEmail(miscleaniousServices.getUsername());
            user.urdToUser(registrationDto);
            userService.updateUser(user);
            model.addAttribute("firstNameError", "");
            model.addAttribute("lastNameError", "");
            model.addAttribute("dobError", "");
            model.addAttribute("phoneNumberError", "");
            model.addAttribute("emailError", "");
            model.addAttribute("passwordError", "");
            model.addAttribute("user", registrationDto);
            model.addAttribute("message", "your account has been succesfully updated.");
            return "update";
    }

    public void userFilter(String emailError,
    String dobError,
    String phoneNumberError,
    String firstNameError ,
    String lastNameError,
    String passwordError,BindingResult bindingResult){

        try {
            firstNameError = miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("firstName", bindingResult), null, Locale.ENGLISH);
        }
        catch(Exception e){

        }

        try{
            lastNameError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("lastName",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            dobError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("dob",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            phoneNumberError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("phoneNumber",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            emailError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("email",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            passwordError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("password",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
    }
}

URL: https://github.com/jonathanick.com/jonathanickovich/jonathanickovich/realaltyking.git.git.git.git.git.git.git.git.gitking.git.gitking.gitking.gitking.gitking.gitking.gitking.git.git

Im building the application that so far only focuses on reletive crud operations interacting with a jpa repository to save info to a database held in mysql.When trying to update an accoutn i get the following error

java.lang.UnsupportedOperationException: null
    at java.base/java.util.AbstractList.remove(AbstractList.java:167) ~[na:na]
    at java.base/java.util.AbstractList$Itr.remove(AbstractList.java:387) ~[na:na]
    at java.base/java.util.AbstractList.removeRange(AbstractList.java:598) ~[na:na]
    at java.base/java.util.AbstractList.clear(AbstractList.java:243) ~[na:na]
    at org.hibernate.type.CollectionType.replaceElements(CollectionType.java:580) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.type.CollectionType.replace(CollectionType.java:757) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.type.TypeHelper.replace(TypeHelper.java:167) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:450) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:205) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:178) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:70) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:829) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:816) ~[hibernate-core-5.6.9.Final.jar:5.6.9.Final]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362) ~[spring-orm-5.3.20.jar:5.3.20]
    at jdk.proxy4/jdk.proxy4.$Proxy111.merge(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.20.jar:5.3.20]
    at jdk.proxy4/jdk.proxy4.$Proxy111.merge(Unknown Source) ~[na:na]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:669) ~[spring-data-jpa-2.7.0.jar:2.7.0]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:639) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[spring-data-jpa-2.7.0.jar:2.7.0]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.20.jar:5.3.20]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.20.jar:5.3.20]
    at jdk.proxy4/jdk.proxy4.$Proxy115.save(Unknown Source) ~[na:na]
    at com.example.realtyKing.Service.UserServiceImpl.updateUser(UserServiceImpl.java:100) ~[classes/:na]
    at com.example.realtyKing.Controller.UserController.update(UserController.java:210) ~[classes/:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]

my user model

import lombok.*;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;
import java.sql.Date;
import java.util.*;

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "first_name", nullable = false)
    private String firstName;

    @Column(name = "last_name", nullable = false)
    private String lastName;
    @Column(nullable = false)
    private Date dob;
    @Column(name = "phone_number", nullable = false)
    private String phoneNumber;


    private String email;
    private String password;

    @Column(name = "email_config")
    private String emailConfig;
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(
                    name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(
                    name = "role_id", referencedColumnName = "id"))

    private Collection < Role > roles;
    public User(String firstName, String lastName,Date dob,String phoneNumber, String email, String password, Collection < Role > roles) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.dob = dob;
        this.phoneNumber=phoneNumber;
        this.email = email;
        this.password = password;
        this.roles = roles;
    }
    public void urdToUser(UserRegistrationDto urd){
        setFirstName(urd.getFirstName());
        setLastName(urd.getLastName());
        setDob(urd.getDob());
        setPhoneNumber(urd.getPhoneNumber());
        setEmail(urd.getEmail());
        setPassword(urd.getPassword());
    }
}

my repository

import com.example.realtyKing.Model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long>{
    User findByEmail(String email);
    User findByPassword(String password);
    void deleteById(long id);
    User findById(long id);
}

my service and service impl

import com.example.realtyKing.Model.UserRegistrationDto;
import com.example.realtyKing.Model.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import java.util.List;

public interface UserService extends UserDetailsService{
    List < User > getAllUsers();
    User getUserById(long id);
    void deleteById(long id);
    User save(UserRegistrationDto registrationDto);
    User getUserByEmail(String email);
    User getUserByPassword(String password);
    void updateUser(User user);
}

import java.util.List;

import java.util.Arrays;
import java.util.Collection;
import java.util.stream.Collectors;

import com.example.realtyKing.Model.UserRegistrationDto;
import com.example.realtyKing.Model.Role;
import com.example.realtyKing.Model.User;
import com.example.realtyKing.Repositories.UserRepository;
import com.example.realtyKing.Utility.MiscleaniousServices;

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.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {


    private UserRepository userRepository;
    @Autowired
    MiscleaniousServices miscleaniousServices;
    @Autowired
    public void setUserRepository (UserRepository  userRepository) {
        this.userRepository= userRepository;
    }

    public UserServiceImpl(UserRepository userRepository) {
        super();
        this.userRepository = userRepository;
    }

    @Override
    public List <User> getAllUsers() {
        return userRepository.findAll();
    }

    @Override
    public User getUserById(long id) {
        User user= this.userRepository.findById(id);

        return user;
    }

    @Override
    public void deleteById(long id) {
        this.userRepository.deleteById(id);
    }
    @Override
    public User save(UserRegistrationDto registrationDto) {
        User user = new User(registrationDto.getFirstName(),registrationDto.getLastName(),
                registrationDto.getDob(),registrationDto.getPhoneNumber(),registrationDto.getEmail(),
                miscleaniousServices.bCryptPasswordEncoder().encode(registrationDto.getPassword()), Arrays.asList(new Role("ROLE_USER")));

        return userRepository.save(user);
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User user = userRepository.findByEmail(username);
        if(user == null) {
            throw new UsernameNotFoundException("Invalid username or password.");
        }
        return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), mapRolesToAuthorities(user.getRoles()));
    }

    private Collection<? extends GrantedAuthority> mapRolesToAuthorities(Collection<Role> roles){
        return roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList());
    }

    @Override
    public User getUserByEmail(String email){
        User user = userRepository.findByEmail(email);
        if(user!=null)
        {
            return user;
        }
        return null;
    }

    @Override
    public User getUserByPassword(String password){
        User user = userRepository.findByPassword(password);
        if(user!=null)
        {
            return user;
        }
        return null;
    }
    @Override
    public void updateUser(User user){
                user.setPassword(miscleaniousServices.bCryptPasswordEncoder().encode(user.getPassword()));
                user.setRoles(Arrays.asList(new Role("ROLE_USER")));
                userRepository.save(user);
    }
}

my controller please note the request goes to post update

import com.example.realtyKing.Model.Mail;
import com.example.realtyKing.Model.UserAuthentification;
import com.example.realtyKing.Model.User;
import com.example.realtyKing.Model.UserRegistrationDto;
import com.example.realtyKing.Service.EmailService;
import com.example.realtyKing.Service.UserService;
import com.example.realtyKing.Utility.MiscleaniousServices;
import com.example.realtyKing.Utility.UserCreationValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import java.util.Locale;

//fix the id problem.

@Controller
public class UserController {
    @Autowired
    private EmailService emailService;


    @Autowired
    private UserService userService;

    @Autowired
    MiscleaniousServices miscleaniousServices;

    @Autowired
    private UserCreationValidator userCreationValidator;

    @ModelAttribute("user")
    public UserRegistrationDto userRegistrationDto() {
        return new UserRegistrationDto();
    }

    @GetMapping("/registration")
    public String userAuthentificationForm(Model model)
    {
        model.addAttribute("firstNameError", "");
        model.addAttribute("lastNameError", "");
        model.addAttribute("dobError", "");
        model.addAttribute("phoneNumberError", "");
        model.addAttribute("emailError", "");
        model.addAttribute("passwordError", "");
        model.addAttribute("user", miscleaniousServices.user());
        return "new_user";
    }
    //finsihed user sighnup
    @PostMapping("/registration")
    public String userAuthentificationForm(@ModelAttribute("user") UserRegistrationDto registrationDto,
                                           BindingResult bindingResult,Model model) {
        userCreationValidator.validate(registrationDto,bindingResult,false);

        if (bindingResult.hasErrors()) {

            String emailError="";
            String dobError="";
            String phoneNumberError="";
            String firstNameError ="";
            String lastNameError="";
            String passwordError="";

            userFilter(emailError, dobError, phoneNumberError,
                    firstNameError , lastNameError, passwordError,bindingResult);

            model.addAttribute("firstNameError", firstNameError);
            model.addAttribute("lastNameError", lastNameError);
            model.addAttribute("dobError", dobError);
            model.addAttribute("phoneNumberError", phoneNumberError);
            model.addAttribute("emailError", emailError);
            model.addAttribute("passwordError", passwordError);

            model.addAttribute("User", miscleaniousServices.user());

            return "new_user";
        }

        userService.save(registrationDto);
        return "redirect:/login";
    }
    //fixed get login.
    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/")
    public String home() {
        return "index";
    }
    @GetMapping("/deleteConfirmation")
    public String deleteConfirmation(Model model){
        UserAuthentification ua=new UserAuthentification();
        model.addAttribute("errors","");
        model.addAttribute("UserAuthentification",ua);
        return "delete_confirmation.html";
    }
    @PostMapping("/delete")
    public String delete(@ModelAttribute("UserAuthentification") UserAuthentification userAuthentification
            ,Model model) throws Exception {
           if(userAuthentification.getUsername().equals("")){
               model.addAttribute("email", "");
               model.addAttribute("errors","Invalid username or password.");
               return "delete_confirmation.html";
           }
           User user=null;

           try{
               user=userService.getUserByEmail(userAuthentification.getUsername());
                }
           catch(Exception e){

           }
           if(user==null){
               model.addAttribute("email", " ");
               model.addAttribute("errors","Invalid username or password.");
               return "delete_confirmation.html";
           }
           if(! miscleaniousServices.bCryptPasswordEncoder().matches(userAuthentification.getPassword(), user.getPassword())){
               model.addAttribute("email", user.getEmail());
               model.addAttribute("errors","Invalid username or password.");
               return "delete_confirmation.html";
           }
           userService.deleteById(user.getId());

           return "redirect:/logout";
       }
    @GetMapping("/forgotPassword")
    public String forgotPassword(Model model){
        User user=new User();
        model.addAttribute("user", user);
        model.addAttribute("confirmation", "");
        return "forgot_password";
    }
    @PostMapping("/forgotPassword")
    public String forgotPassword(@ModelAttribute("User") User user,Model model) {


        try{
            user=userService.getUserByEmail(user.getEmail());
            Mail mail = new Mail();
            mail.setFrom("[email protected]");//replace with your desired email
            mail.setMailTo(user.getEmail());//replace with your desired email

            emailService.remeberPassword(user,mail);
        }
        catch(Exception e)
        {
            model.addAttribute("User", user);
            model.addAttribute("confirmation", "their was a problem.");
            return "forgot_password";
        }

        model.addAttribute("User", user);
        model.addAttribute("confirmation", "email sent"+
                " password soon");
        return "forgot_password";
    }
    @GetMapping("update")
    public String update(Model model){
        User user=userService.getUserByEmail(miscleaniousServices.getUsername());
        UserRegistrationDto urd=new UserRegistrationDto();
        urd.userToUrd(user);
        model.addAttribute("firstNameError", "");
        model.addAttribute("lastNameError", "");
        model.addAttribute("dobError", "");
        model.addAttribute("phoneNumberError", "");
        model.addAttribute("emailError", "");
        model.addAttribute("passwordError", "");
        model.addAttribute("user", user);
        model.addAttribute("message", " ");
        return "update";
    }
        @PostMapping("update")
        public String update(@ModelAttribute("user") UserRegistrationDto registrationDto,
                BindingResult bindingResult,Model model) {
            userCreationValidator.validate(registrationDto,bindingResult,true);

            if (bindingResult.hasErrors()) {

                String emailError="";
                String dobError="";
                String phoneNumberError="";
                String firstNameError ="";
                String lastNameError="";
                String passwordError="";

                userFilter(emailError, dobError, phoneNumberError,
                        firstNameError , lastNameError, passwordError,bindingResult);


                model.addAttribute("firstNameError", firstNameError);
                model.addAttribute("lastNameError", lastNameError);
                model.addAttribute("dobError", dobError);
                model.addAttribute("phoneNumberError", phoneNumberError);
                model.addAttribute("emailError", emailError);
                model.addAttribute("passwordError", passwordError);
                model.addAttribute("message", "your account has not been succesfully updated.");
                model.addAttribute("User", registrationDto);

                return "update";
            }
            User user=userService.getUserByEmail(miscleaniousServices.getUsername());
            user.urdToUser(registrationDto);
            userService.updateUser(user);
            model.addAttribute("firstNameError", "");
            model.addAttribute("lastNameError", "");
            model.addAttribute("dobError", "");
            model.addAttribute("phoneNumberError", "");
            model.addAttribute("emailError", "");
            model.addAttribute("passwordError", "");
            model.addAttribute("user", registrationDto);
            model.addAttribute("message", "your account has been succesfully updated.");
            return "update";
    }

    public void userFilter(String emailError,
    String dobError,
    String phoneNumberError,
    String firstNameError ,
    String lastNameError,
    String passwordError,BindingResult bindingResult){

        try {
            firstNameError = miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("firstName", bindingResult), null, Locale.ENGLISH);
        }
        catch(Exception e){

        }

        try{
            lastNameError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("lastName",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            dobError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("dob",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            phoneNumberError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("phoneNumber",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            emailError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("email",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
        try{
            passwordError=miscleaniousServices.messageSource().getMessage(
                    miscleaniousServices.getErrorMessage("password",bindingResult),null, Locale.ENGLISH);
        }
        catch(Exception e){

        }
    }
}

url:https://github.com/jonathanIckovich/realtyKing.git

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文