У меня возникают проблемы с выбором спящего режима для возврата правильно заполненного графа объектов, когда этот выбор содержит объединения из множества коллекций.
Например:
String sql = "select distinct changeset " +
"from Changeset changeset " +
"join fetch changeset.changeEntries as changeEntry " +
"join fetch changeEntry.repositoryEntity as repositoryEntity " +
"join fetch repositoryEntity.repository as repository " +
"where repository.connectionName = :connectionName";
- Changeset имеет много ChangeEntries
- ChangeEntry имеет один RepositoryEntity
- RepositoryEntity имеет один репозиторий
Приведенный выше оператор возвращает правильные данные, но граф объектов заполнен неправильно, т. Е. Каждый набор изменений содержит каждый ChangeEntry, а не только его собственные дочерние элементы.
Вот соответствующие фрагменты этих двух классов:
public class Changeset {
@NotNull
@OneToMany(mappedBy="changeset", targetEntity=ChangeEntry.class, cascade={CascadeType.ALL }, fetch=FetchType.EAGER )
private Set<IChangeEntry> changeEntries;
И ...
public class ChangeEntry {
@NotNull
@ManyToOne(targetEntity=Changeset.class)
@ForeignKey(name="FkChangeEntryChangeset")
private IScmChangeset changeset;
@NotNull
@ManyToOne(targetEntity=RepositoryEntity.class, cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@ForeignKey(name="FkChangeEntryRepoEntity")
private IRepositoryEntity repositoryEntity;
Любая помощь очень ценится
Привет
Marty