Dozer Mapping проблема с коллекциями

У меня проблема с Dozer Mapping. Проблема в том, что мне нужно сопоставить коллекцию из моей сущности с моей DTO.

Коллекция в сущности:

private List<Devis> devises = new ArrayList<Devis>(0);

@OneToMany(fetch = FetchType.LAZY, mappedBy = "idDemande")
public List<Devis> getDevises() {
    return this.devises;
}

public void setDevises(List<Devis> devises) {
    this.devises = devises;
}

В ДТО:

private List<DevisDto> devises = new ArrayList<DevisDto>();

public List<DevisDto> getDevises() {
    return devises;
}

public void setDevises(List<DevisDto> devises) {
    this.devises = devises;
}

Ошибка :

org.hibernate.LazyInitializationException: illegal access to loading collection
MapId: null
Type: null
Source parent class: com.bnpparibas.realestate.workflowtma.entity.Devis
Source field name: lignes
Source field type: class org.hibernate.collection.internal.PersistentBag
Source field value: Unable to determine source field value
Dest parent class: com.bnpparibas.realestate.workflowtma.dto.DevisDto
Dest field name: lignes
Dest field type: java.util.List

person Safwen Khalloufi    schedule 17.10.2013    source источник


Ответы (2)


Вероятно, вы выполняете сопоставление после закрытия сеанса Hibernate. Оставьте его открытым или установите FetchType на EAGER.

person artbristol    schedule 17.10.2013

Если вы не используете FetchType для EAGER, вам нужно создать новую службу, которая вызывает новый класс Dao, здесь вы используете Criteria или любой другой язык для запросов, как только вы получите список Devis, а затем сопоставлены с классом Dto, но с использованием mapCollection(), который разработан вами, в этом методе вы можете сопоставить сущность с dto и вернуть список dto. Вы не получаете результат, потому что вы сопоставляете список с классом, поэтому вы получаете ошибку. Если вы не получите, оставьте комментарий для меня, я объясню через код. Если вы дадите код здесь.

person pankaj    schedule 01.05.2014