Шаблон DTO: Лучший способ скопировать свойства между двумя объектами

В моем приложенииАрхитектура. Обычно я отправляю объект или список объектов из уровня доступа к данным на веб-уровень через уровень обслуживания, в котором эти объекты преобразуются изDAO возражать противDTO объект и наоборот. Веб-слой неУ него нет доступа к объектам DAO, и уровень DAO не использует DTO.

Чтобы продемонстрировать, я обычно пишу код как:

@Transactional(readOnly = true)
public List getAllUserAsUserDTO() {
    List userDTOs = new ArrayList();

    for(User user : getAllUser()) {
        userDTOs.add(constructUserDTO(user));
    }

    return userDTOs;
}

private UserDTO constructUserDTO(User user) {
    UserDTO userDTO = new UserDTO();
    userDTO.setFullName(user.getFullName());
    userDTO.setId(user.getId());
    userDTO.setUsername(user.getUsername());
    userDTO.setRole(user.getRole());
    userDTO.setActive(user.isActive());
    userDTO.setActiveText(user.isActive() ? "Active" : "Inactive");
    return userDTO;
}

Здесь пользователь является объектом базы данных:

@javax.persistence.Entity
@Table(name = "USER")
public class User extends Entity {

    @Transient
    private static final long serialVersionUID = -112950002831333869L;

    private String username;
    private String fullName;
    private boolean active;
    private String role;
    // other fields

    public User() {
        super();
    }

    @NaturalId
    @Column(name = "USERNAME", nullable = false)
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Column(name = "FULL_NAME")
    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    @Column(name = "ACTIVE", nullable = false)
    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }

    @Column(name = "ROLE")
    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

И это UserDTO:

public class UserDTO extends BaseDTO {

    private static final long serialVersionUID = -3719463614753533782L;

    private String username;
    private String fullName;
    private String role;
    private String activeText;
    private Boolean active;
    //other properties

    public UserDTO() {
        super();
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getActiveText() {
        return activeText;
    }

    public void setActiveText(String activeText) {
        this.activeText = activeText;
    }

    public Boolean getActive() {
        return active;
    }

    public void setActive(Boolean active) {
        this.active = active;
    }
}

Поэтому мне было интересно, если это единственный способ скопировать свойства между двумя объектами. Я думаю, я не уверен. Также я используюlambdajТак есть ли метод в этом API, с помощью которого я могу скопировать все эти свойства, чтобы создать список других объектов?

Эта тема может показаться субъективной, но я действительно хочу узнать от вас, экспертов, как можно выполнить преобразование объекта из одной формы в другую, когда максимальные поля имеют одинаковую строку.

Ответы на вопрос(4)

Ваш ответ на вопрос