我遇到了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;
}
在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 :(得分:0)
你可能在Hibernate会话关闭后进行映射。保持打开状态,或将FetchType
设置为EAGER
。
答案 1 :(得分:0)
如果你没有使用FetchType到EAGER那么你必须创建一个新的服务来调用一个新的Dao类,你在这里使用Criteria或任何其他语言进行查询,一旦获得Devis列表然后映射到Dto类但是使用mapCollection您在此方法中设计的()可以将实体映射到dto并返回dto列表。您没有得到结果,因为您将List映射到Class这就是您发错的原因。如果你没有得到,那么我会通过代码解释。如果你在这里给出一些代码。