Таблица:Fetch возвращает только один элемент в коллекции
Image таблица содержит внешний ключ MediaID своей родительской таблицы средств массовой информации
----------
id | mediaid | url
========================
104 | 103 | IMG_PATH
383 | 103 | IMG_PATH
384 | 103 | IMG_PATH
395 | 103 | img_path
Медиа лицо имеет коллекция изображений:
private Set<Image> images = new HashSet<Image>(0)`;
@OneToMany(mappedBy = "media", targetEntity = Image.class ,cascade = CascadeType.ALL)
public Set<Image> getImages() {
return images;
}
Изображение объект сниппет:
private Media media;
@ManyToOne
@JoinColumn(name = "mediaId")
public Media getMedia() {
return media;
}
Я реализовал следующий запрос, который должен возвращать объект медиа с коллекцией всех изображений, чьи Ф.К. соответствует его идентификатор при условии.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Media> cqObject = cb.createQuery(Media.class);
Root<Media> rootEntry = cqObject.from(Media.class);
rootEntry.fetch(Media_.images, JoinType.LEFT);
Predicate predicate = cb.equal(rootEntry.get(Media_.id), id);
cqObject.select(rootEntry).where(predicate);
Media _fetcheMedia = em.createQuery(cqObject).getSingleResult();
Коллекция для объекта Media, которая была возвращена, содержит только один элемент изображения. Я точно знаю, что база данных содержит несколько элементов изображения для указанного носителя.
* Примечание Media_ просто класс метамодели, который представляет собой медиа-объект
Hibernate за объект медиа с идентификатором = 103
select media0_.mediaId as mediaId1_8_0_,
images1_.imageId as imageId1_6_1_,
media0_.active as active2_8_0_,
media0_.created as created3_8_0_,
media0_.description as descript4_8_0_,
media0_.listType as listType5_8_0_,
media0_.parentId as parentId6_8_0_,
media0_.propertyTypeId as property7_8_0_,
media0_.seasonId as seasonId8_8_0_,
media0_.status as status9_8_0_,
media0_.userId as userId10_8_0_,
images1_.active as active2_6_1_,
images1_.created as created3_6_1_,
images1_.imageTypeId as imageTyp5_6_1_,
images1_.imageUrl as imageUrl4_6_1_,
images1_.mediaId as mediaId6_6_1_,
images1_.mediaId as mediaId6_6_0__,
images1_.imageId as imageId1_6_0__ from media media0_
left outer join image images1_ on media0_.mediaId=images1_.mediaId where media0_.mediaId=103
Хорошо, когда вы получаете объект Media, есть ли изображения, загруженные сущностью или прокси-сервером, которые вам нужно ленить инициализировать? –
Я предполагаю, что он по умолчанию является ленивым init, а rootEntry.fetch (Media_.images, JoinType.LEFT) заставляет выборку в коллекции. – Fabii
критерии выглядят хорошо .. можете ли вы запустить в режиме отладки и опубликовать запрос, который сгенерирован? –