Я пытаюсь удалить объект в таблице 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);
}
В результате я могу добавить нового пользователя, но не удалить или переопределить пользователя.