序列化时如何限制hibernate相关对象

How to limit hibernate related objects during serialization

我的问题不是如何摆脱周期性依赖,我知道如何。

在我们的示例中更是如此,我将使用单向连接。

假设我们有很多相关对象:

@Entity
public class EntityOne {

    @OneToMany
    private Set<EntityTwo> entityTwoCollection;

}

@Entity
public class EntityTwo {

    @OneToMany
    private Set<EntityThree> entityThreeCollection;

}

@Entity
public class EntityThree {

    @OneToMany
    private Set<EntityFour> EntityFourCollection;

}

...
// 4, 5 ... 20

如果我们什么都不做,尝试序列化控制器中的第一个对象(EntityOne),前提是它有连接,我们将得到所有二十个序列化对象,这是没有必要的,而且非常昂贵。

对于我的情况,我需要第一个对象 (EntityOne) 将相关对象仅获取到第三个。对于第二个对象 (EntityTwo),根本不显示相关对象,只显示您的字段。

问题是,我应该使用什么技术才能将 API 中的对象显示到一定深度。为了不向数据库查询我不需要显示的对象。

这是一个很好的例子,说明了为什么我们不应该通过 API 直接公开我们的实体,而是使用某种形式的 DTO。这允许将内部表示与外部表示明确分开。对于那些使用 Spring REST 的人来说,dto 是 Resource 的扩展。 在我的许多项目中,我使用 Dozer 在实体和 dto 之间进行映射。 Dozer 进行通配符映射,这意味着它会自动映射具有相同名称和兼容类型的任何字段(没有映射可写)。不在您的 DTO 中的任何字段都不会被映射。