Почему я не могу удалить пользователя из стандартного репозитория JDBC - Spring Boot JPA - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь удалить объект в таблице User, но когда я вызываю этот метод,

companyRepository.deleteById(userID);

НИЧЕГО не происходит. Абсолютно ничего.

Мои сущности:

Пользователь:

@Entity
@Getter
@Setter
public class User {
    @Id
    private long user_id;

    private String username;

    private String password;

    private String email;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;

}

Роль:

@Entity
@Getter
@Setter
@NoArgsConstructor
public class Role {
    @Id
    private long role_id;

    private String role;

}

Что я пробовал с:

  • Измените CascadeType.ALL на другой тип каскада или типы каскада.
  • Измените FetchType.EAGER на FetchType.LAZY

Но когда я не включаю CascadeType.PRESIST или FetchType.EAGER , я не могу войти. Это связано с тем, что эти объекты являются стандартными конфигурациями для JDBC JPA. Так что они мне нужны.

Вопрос:

  • Почему я не могу удалить своего пользователя?
  • Знаете ли вы другую настройку сущностей с ролью и пользователем, которая можетработать для удаления?
  • Я не могу изменить пользователя, потому что тогда Spring Boot жалуется, что я пытаюсь «перезаписать» сущность с тем же идентификатором, в данном случае, индекс столбца 0.
  • Я могу добавить нового пользователя, нет проблем.

Редактировать:

Метод обновления:

@PostMapping("/updateuser")
    public HTTPMessage uppdateUser(@RequestBody User user, @RequestParam("updatepassword") boolean updatepassword) {
        // Check if user exist
        if (userRepository.findById(user.getUser_id()) != null) {

            // Check if our email/username is right
            boolean valid = EmailValidator.getInstance().isValid(user.getUsername());
            if(valid == false)
                return new HTTPMessage("Email: " + user.getUsername() + " is not valid", HttpStatus.NOT_ACCEPTABLE.value());

            // Update the password if we say that it should be updated
            if (updatepassword == true)
                user.setPassword(passwordEncoder.encode(user.getPassword()));

            // Count and user id
            long rows = userRepository.count();
            long userID = user.getUser_id();

            // Delete
            roleRepository.deleteById(userID);
            // Delete the user and the online
            userRepository.deleteById(userID);

            // Set new ID and save
            user.setUser_id(rows);
            for(Role role : user.getRoles())
                role.setRole_id(user.getUser_id());
            userRepository.saveAndFlush(user);


            // Update the compant table too
            rows = companyRepository.count();
            companyRepository.deleteById(userID);
            Company saveCompany = new Company();
            saveCompany.setId(rows);
            saveCompany.setUsername(user.getEmail().split("@")[0]);
            saveCompany.setCompany(user.getEmail().split("@")[1].split("\\.")[0]); // From "myUser@MyCompany.com" to "MyCompany"
            saveCompany.setEmail(user.getEmail());
            companyRepository.saveAndFlush(saveCompany);
            return new HTTPMessage("User: " + user.getUsername() + " is updated", HttpStatus.OK.value());

        } else {
            return new HTTPMessage("User: " + user.getUsername() + " does not exist", HttpStatus.NOT_FOUND.value());
        }
    }

Хранилище пользователя:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    User findByUsername(String username);

}

Хранилище ролей

@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {

}

Репозиторий компании

@Repository
public interface CompanyRepository extends JpaRepository<Company, Long> {

    Company findByUsername(String username);
}

В результате я могу добавить нового пользователя, но не удалить или переопределить пользователя.

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