0

对于我们的项目,我们有一个层架构。DAO 层与数据库通信并获取存储的实体。Service-Layer 与 DAO-Layer 通信以获取实体并实现更复杂的方法。然后 View-Layer 与 Serivce-Layer 通信以获取所需的信息。

实体部分:

@Entity
public class Operation implements Serializable {
private Integer id;

@GeneratedValue
@Id
public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}
private List<Participation> participations;

@OneToMany
public List<Participation> getParticipations() {
    return participations;
}

public void setParticipations(List<Participation> participations) {
    this.participations = participations;
}

DAO 层:

@Override
public Operation read(int id) {
    return this.em.find(Operation.class, id);
}

服务层:

@Override
public Operation getOperation(Integer operationId)
{
    Operation operation = operationDAO.read(operationId);
    //operation.getParticipations();
    return operation;
}

视图层:

Operation o = opService.getOperation(operationId);

operation.getParticipations();在没有视图层的情况下使用它,缺少参与列表。如果我添加愚蠢的代码,那么对象将被正确转发并且参与列表可用。

我无法向自己解释为什么对象没有正确转发?你能帮助我吗?提前谢谢。

编辑:对象的所有其他属性/字段都正确转发(可能很重要)

4

2 回答 2

1

@OneToMany 默认是延迟加载的

于 2013-01-04T11:24:48.800 回答
0

@OneToMany默认FetchTypeLAZY. _

并且该LAZY策略是对持久性提供者的提示,即在首次访问数据时应该延迟获取数据。

于 2013-01-04T11:32:38.400 回答