Как сопоставить 2 класса с помощью средства сопоставления моделей, Entity to Dto

Я хочу преобразовать два объекта с одинаковыми атрибутами, используя средство сопоставления моделей. Как бы то ни было, я не могу из-за отношений «многие ко многим».

private User fromEntity(UserEntity userEntity) {
LOGGER.info("Converting userEntity to user model with Id" + 
userEntity.getUserId());
User user = modelMapper.map(userEntity,User.class);
LOGGER.info("Converted userEntity to user model with Id" + 
userEntity.getUserId());
return user;
}

У меня есть классы User и UserEntity. Они сопоставлены с классами Role и RoleEntity:

Вот мой пользовательский класс:

public class User {

    private Long userId;


    private String userUsername;
    private String userName;
    private String userSurname;
    private String password;
    private String addres;
    private String eMail;
    private boolean active = false;

    private String key;
    //@JsonBackReference
    private Set<Role> role ;


    public User(){
        role = new HashSet<>();

    }

Класс роли:

  public class Role {

private Long roleId;

    private String role;

    private Set<User> user;

    public Role(){
        user = new HashSet<>();
    }

    //@JsonManagedReference
    public Set<User> getUser() {
        return user;
    }
    }

Класс UserEntity:

@Entity
@Table( name="users" )
public class UserEntity {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "userId")
    private Long userId;

    private String userUsername;
    private String userName;
    private String userSurname;
    private String password;

    private String addres;

    private String eMail;

    private boolean active;

    private String key;


    @JsonManagedReference
    @ManyToMany( cascade = CascadeType.ALL, fetch = FetchType.EAGER )
    @JoinTable(
            name = "users_roles",
            joinColumns = {@JoinColumn(name="userId")},
            inverseJoinColumns = {@JoinColumn(name="roleId")}
    )
    private Set<RoleEntity> roleEntities;

    public UserEntity(){
        active=false;
        roleEntities = new HashSet<>();

    }

и класс RoleEntity:

@Entity
@Table(name="roles")
public class RoleEntity {

    @Id
    @GeneratedValue
    private Long roleId;

    private String role;

    @ManyToMany //( mappedBy = "roleEntities") //Bunu kaldırdım
    private Set<UserEntity> userEntities ;


    public RoleEntity(){
        userEntities = new HashSet<>();
    }

Это дает мне ошибку, когда я правильно вхожу в систему:

Ошибки сопоставления ModelMapper: 1) Преобразователь org.modelmapper.internal.converter.CollectionConverter@735060fc не смог преобразовать java.util.Set в java.util.Set. 1 ошибка


person Alpcan Yıldız    schedule 24.07.2018    source источник
comment
Можете ли вы предоставить более подробную информацию о сообщении об ошибке или полной трассировке стека? Спасибо.   -  person Chun Han Hsiao    schedule 26.07.2018
comment
Спасибо за комментарий. Я решил проблему и добавил решение.   -  person Alpcan Yıldız    schedule 27.07.2018


Ответы (1)


Я изменил свой атрибут класса RoleEntity с:

@ManyToMany //( mappedBy = "roleEntities") 
private Set<UserEntity> userEntities ;

к этому:

@ManyToMany (mappedBy = "roleEntities", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<UserEntity> userEntities ;

Вот так я решил проблему.

person Alpcan Yıldız    schedule 27.07.2018