Когда пытаешься добавить ещё одного выкидывается ошибка: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'. Я думаю что из - за того что я задаю через конструктор id в UserEntity, но как тогда записывать новых юзеров в БД.
UserEntity:
@Entity
@Table(name = "user_entity")
public class UserEntity implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username, password;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<RoleEntity> roles;
public UserEntity() {
}
public UserEntity(String username, String password, Set<RoleEntity> roles) {
this.username = username;
this.password = password;
this.roles = roles;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return (Collection<? extends GrantedAuthority>) getRoles();
}
@Override
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Set<RoleEntity> getRoles() {
return roles;
}
public void setRoles(Set<RoleEntity> roles) {
this.roles = roles;
}
}
RoleEntity:
@Entity
@Table(name = "role_entity")
public class RoleEntity implements GrantedAuthority {
@Id
private Long id;
private String name;
@Transient
@ManyToMany(mappedBy = "roles")
private Set<UserEntity> users;
public RoleEntity() {
}
public RoleEntity(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<UserEntity> getUsers() {
return users;
}
public void setUsers(Set<UserEntity> users) {
this.users = users;
}
@Override
public String getAuthority() {
return getName();
}
}
UserService:
@Service
public class UserService implements UserDetailsService {
@Autowired
UserRepository userRepository;
@Autowired
RoleRepository roleRepository;
@Autowired
BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserEntity user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
return user;
}
public UserEntity findUserById(Long userId) {
Optional<UserEntity> userFromDb = userRepository.findById(userId);
return userFromDb.orElse(new UserEntity());
}
public List<UserEntity> allUsers() {
List<UserEntity> userEntityList = new ArrayList<>();
for(UserEntity user : userRepository.findAll()){
userEntityList.add(user);
}
return userEntityList;
}
public boolean saveUser(UserEntity user) {
UserEntity userFromDB = userRepository.findByUsername(user.getUsername());
if (userFromDB != null) {
return false;
}
user.setRoles(Collections.singleton(new RoleEntity(1L, "ROLE_USER")));
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepository.save(user);
return true;
}
public boolean deleteUser(Long userId) {
if (userRepository.findById(userId).isPresent()) {
userRepository.deleteById(userId);
return true;
}
return false;
}
}
Сама БД в PphMyAdmin: