Separar objetos JPA con propiedades inicializadas diferidas

Hay dos entidades JPA: Usuario y Orden con relación uno a muchos.

/**
 * User DTO
 */
@Entity
@Table(name="user")
public class User implements Serializable {
    private static final long serialVersionUID = 8372128484215085291L;

    private Long id;
    private Set<Order> orders;

    public User() {}

    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequenceUser")
    public Long getId() {
        return this.id;
    }
    private void setId(Long id) {
        this.id = id;
    }

    @OneToMany(mappedBy="user", cascade=CascadeType.PERSIST, fetch=FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.EXTRA)
    public Set<Order> getOrders() {
        return orders;
    }
    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }
 }


/**
 * Order DTO
 */
@Entity
@Table(name="order")
public class Order implements Serializable {
    private static final long serialVersionUID = 84504362507297200L;

    private Long id;
    private User user;

    public Order() {
    }

    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequenceOrder")
    public Long getId() {
        return this.id;
    }
    private void setId(Long id) {
        this.id = id;
    }

    @ManyToOne
    @JoinColumn(name="user_id")
    public User getUser(){
        return user;
    }
    public void setUser(User user){
        this.user = user;
    }
}

Utilizo estas entidades en mis clases de capa de servicio donde cada método se ejecuta en la transacción. Todo está bien, excepto en los casos en que los métodos de las clases de capa de servicio deben devolver estas entidades.

@Transactional(readOnly=true)
public Set<Order> getOrders() {
    Set<Order> orders = user.getOrders();

    return orders;
}

Este método devuelve bien los datos. Pero cuando intento acceder a los elementos de la colección recibida, encuentro una excepción: "org.hibernate.LazyInitializationException: no se pudo inicializar perezosamente una colección de roles: package.User.orders, no se cerró ninguna sesión o sesión".

Entonces, fue exceptuado. Pensé que separar el resultado resolvería mi problema, pero un truco como este

@Transactional(readOnly=true)
public Set<Order> getOrders() {
    Set<Order> orders = user.getOrders();

    for(Order order: orders)
        entityManager.detach(order);
    return orders;
}

no cambió nada :(

No importa para mí, la información sobre los usuarios asistirá en un conjunto de pedidos o no. Solo quiero trabajar con este conjunto y no modificarlo.

Alguien puede ayudarme? :)

Respuestas a la pregunta(2)

Su respuesta a la pregunta