为什么Hibernate实体图获取嵌套的懒惰收藏



我正在尝试使用实体图来触发懒惰集合的加载,但不幸的是,实体图还触发了所有嵌套集合。我正在使用Spring-data-jpa-entity-graph库在运行时创建实体图。

@Entity
public class Brand implements Serializable {
    @OneToMany(mappedBy = "brand", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<Vehicle> vehicles;
}
@Entity
public class Vehicle implements Serializable {
    @ManyToOne
    @JoinColumn(name = "brand_id")
    private Brand brand;
    @OneToMany(mappedBy = "vehicle", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<VehiclePart> parts;
}
@Entity
public class VehiclePart implements Serializable {
    @ManyToOne
    @JoinColumn(name = "vehicle_id")
    private Vehicle vehicle;
}

使用JPA存储库的春季服务:

public interface BrandsRepository extends EntityGraphJpaRepository<Brand, Long> {
    Page<Brand> findAll(Pagable pagable, EntityGraph entityGraph);
}
@Service
public class BrandsService {
    public List<Brand> find() {
        return repository.findAll(PageRequest.of(0, 10, Sort.by(Sort.Direction.ASC, "id")), EntityGraphUtils.fromAttributePaths("vehicles")).getContent();
    }
}

在这种情况下,还返回每辆车的零件收集

我们如何才能触发仅在第一级(只有品牌的车辆 - 没有车辆的零件(上加载懒惰的集合?

我也有同样的问题。就我而言:春天和休眠的行为正确,但是我可以看到,未使用(懒惰(字段是从SQL查询的。

当您使用字段时,它们将通过SQL加载。
IAM使用Lombok和@EqualsAndHashCode.Exclude@ToString.Exclude有助于预防。

在您的情况下:添加DTO层。不要将自己归还实体。
或使用@JsonIgnore注释忽略字段。

最新更新