Вставлено нулевое значение Hibernate modelmapper - PullRequest
0 голосов
/ 25 мая 2020

Я начинаю использовать 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 только идентификатором, имя равно нулю и добавляет строку для каждого нового пользователя).

Спасибо.

...