推土机与集合的映射问题

时间:2013-10-17 08:54:04

标签: hibernate mapping dozer

我遇到了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

2 个答案:

答案 0 :(得分:0)

你可能在Hibernate会话关闭后进行映射。保持打开状态,或将FetchType设置为EAGER

答案 1 :(得分:0)

如果你没有使用FetchType到EAGER那么你必须创建一个新的服务来调用一个新的Dao类,你在这里使用Criteria或任何其他语言进行查询,一旦获得Devis列表然后映射到Dto类但是使用mapCollection您在此方法中设计的()可以将实体映射到dto并返回dto列表。您没有得到结果,因为您将List映射到Class这就是您发错的原因。如果你没有得到,那么我会通过代码解释。如果你在这里给出一些代码。