У меня есть следующие объекты:
@Entity
public class ProjectEntity implements Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(targetEntity = FlowEntity.class)
private Flow flow;
}
@Entity
public class FlowEntity implements Flow {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(targetEntity = StepEntity.class, fetch = FetchType.EAGER)
private List<Step> steps;
}
@Entity
public class StepEntity implements Step {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(targetEntity = ResourceEntity.class, fetch = FetchType.LAZY)
private List<Resource> resources;
@OneToMany(targetEntity = StepRuleEntity.class, fetch = FetchType.LAZY)
private List<StepRule> rules;
@ManyToMany(targetEntity = ResourceTypeDataEntity.class, fetch = FetchType.LAZY)
private List<ResourceTypeData> resourceTypeData;
}
Теперь, когда я получаю свой проект, я хочу, чтобы все было загружено.Я не могу сделать все загруженным, потому что это только замедлит все.Но для этого функционала мне сейчас действительно нужно все из проекта.
Я прочитал в Интернете, что вам нужно вызывать метод .size()
для каждой коллекции, и что jpa загрузит коллекции, но это не сработает.Кроме того, мне действительно странно, что мне нужно сделать цикл for
в моем дао на каждом шаге потока, чтобы загрузить следующие ленивые загруженные коллекции.
Мой метод помечен @Transactional
для полученияпроект и это по умолчанию JpaRepostitory
.
Как вы делаете это правильно?