Ленивая загрузка не работает - jpa - PullRequest
1 голос
/ 03 февраля 2011

Привет всем, у меня есть три стола Child, Pet и Toy.У питомца есть ссылочный ключ с идентификатором ребенка, а у игрушки - ссылочный ключ с идентификатором собаки.Я хочу загрузить все данные о ребенке и его питомцах, но я не хочу загружать данные игрушки

@OneToMany(mappedBy = "petEntity", fetch = FetchType.LAZY)
public Set<PetEntity> getPetEntitySet() {
    return petEntitySet;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ChildId", insertable = false, updatable = false)
public ChildEntity getChildEntity() {
    return childEntity;
}

то же самое для набора игрушек.

для загрузки данных, которые у меня есть

List<ChildEntity> list = entityManager.createQuery(
"SELECT c FROM ChildEntity c "+
"LEFT JOIN FETCH c.petEntitySet ",
 ChildEntity.class).getResultList();
    return list;

но эта вещь загружает мне все данные, а не только информацию о ребенке и его питомцах.

Как я могу запретить менеджеру сущностей загружать только данные в таблице, ине присоединяться, когда я этого не хочу

Спасибо за советы

Я забыл упомянуть, что в этой погоне он не только загружает все данные, но и возвращает больше, чем простоодна копия ребенка elemnt

1 Ответ

2 голосов
/ 03 февраля 2011

Причина загрузки дополнительных данных заключается в том, что вы используете ключевое слово fetch. Это будет EAGERLY загружать любых домашних животных ребенка. Просто удалите fetch и произойдет ленивая загрузка.

Обновление

Я вижу, что это именно то, что вам нужно, поэтому просто убедитесь, что equals() и hashCode() правильно переопределены во всех соответствующих классах, так как я предполагаю, что вы используете Set.
Таким образом, jpa знает, как искать дубликаты

Второе обновление

Да, вы можете легко использовать DISTINCT в своих запросах.

Просто добавьте DISTINCT в ваш выбор

List<ChildEntity> list = entityManager.createQuery(
"SELECT DISTINCT c FROM ChildEntity c "+
"LEFT JOIN FETCH c.petEntitySet ",
 ChildEntity.class).getResultList();
    return list;
...