Я начинаю использовать Spring и Hibernate.
У меня есть эта Entity:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@NotEmpty
private String password;
@NotEmpty
private String firstname;
@NotEmpty
private String lastname;
@NotEmpty
private String email;
@ManyToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "user_role",
joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "role_id") })
private Set<Role> roles = new HashSet<>();
}
и этот DTO:
public class UserDTO {
private String username;
private String password;
private String firstname;
private String lastname;
private String email;
private List<String> roles;
}
Role
похоже на это (RoleType
является перечислением):
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Enumerated(EnumType.STRING)
@Column(unique = true)
private RoleType name;
public Role() {}
public Role(RoleType name) {
this.name = name;
}
}
Теперь в моем контроллере я хочу создать нового пользователя:
public void createNewUser(UserDTO user){
ModelMapper _modelMapper=new ModelMapper();
User _newUser=_modelMapper.map(user, User.class);
//SECOND PART
Set<Role> _roles=new HashSet<>();
for (String _item : user.getRoles()) {
RoleType _roleType=RoleType.valueOf(_item);
Role _role=_roleRepository.findByName(_roleType);
_roles.add(_role);
}
_newUser.setRoles(_roles);
_userRepository.save(_newUser);
}
Меня беспокоит вторая часть (она помогает, но я не уверен в хороших практиках). У меня 2 вопроса:
-это правильный способ заполнить роли, говоря, что мой UserDTO
принимает List<String>
?
- можно ли сопоставить все с помощью ModelMapper
? (Я пробовал, но он заполняет мою таблицу sql только идентификатором, имя равно нулю и добавляет строку для каждого нового пользователя).
Спасибо.