Как сопоставить объект пользователя в моей модели UserRole с моделью пользователя?
Ролевая модель пользователя:
public class UserRole extends Base {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id" ,referencedColumnName = "id")
User user;
@JoinColumn(name = "role_id" ,referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
Role role;
@Column(name = "is_active")
Boolean isActive;
}
Модель пользователя:
public class User extends Base {
@Column(name = "name")
String name;
@Column(name = "surname")
String surname;
@Column(name = "email", unique = true)
String email;
@Column(name = "password")
String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
List<Role> roles;
@Column(name = "status")
@Enumerated(EnumType.STRING)
Status status;
}
Я сделал это с помощью Mapper, но это не сработало
@Mapping(target = "id", source = "user.id")
@Mapping(target = "name", source = "user.name")
@Mapping(target = "surname", source = "user.surname")
@Mapping(target = "email", source = "user.email")
@Mapping(target = "roles", source = "user.roles")
List<User> toDtoList(List<UserRole> userRoles);
Я думаю, что используемый метод не совсем подходит для сопоставления списка UserRole со списком объектов User.
Аннотация @Mapping(target = "") используется для сопоставления отдельных объектов, а не коллекций. Итак, мы можем использовать приведенное ниже, чтобы решить проблему.
Обновленный код,
@Mapping(target = "id", source = "user.id")
@Mapping(target = "name", source = "user.name")
@Mapping(target = "surname", source = "user.surname")
@Mapping(target = "email", source = "user.email")
@Mapping(target = "roles", source = "user.roles")
User toUser(UserRole userRole);
List<User> toUserList(List<UserRole> userRoles);
Этот вопрос похож на: MapStruct: сопоставление исходного класса с объектом (с UUID поля) с целевым с UUID поля приводит к нулевому результату. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.