2013-10-17 100 views
0

我有一個推土機映射問題。問題是我想把我的實體的集合映射到我的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; 
} 

在DTO:

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 

回答

0

你可能做的映射後的Hibernate Session被關閉。保持打開狀態,或將FetchType設置爲EAGER

0

如果你沒有使用Eetch的FetchType,那麼你必須創建一個新的服務,調用一個新的Dao類,在這裏你使用Criteria或任何其他語言進行查詢,一旦你得到Devis的列表,然後映射到Dto類,但使用mapCollection()是你在這個方法中設計的,你可以將實體映射到dto並返回dto列表。您沒有得到結果,因爲您將List映射到Class,這就是您爲什麼會出錯的原因。如果你沒有得到,那麼給我留言,我會通過代碼解釋。如果你在這裏給一些代碼。