2012-04-19 3 views
2

У меня возникла проблема с JPA, отказывающей в получении коллекции, которая настроена на получение лени. Вот как юридические лица определяются:Проблема с JPA, не загружающая ленивую подборку

Сообщить Entity

//bi-directional many-to-one association to Host 
@OneToMany(mappedBy="report", cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
private Set<Host> hosts; 

Хост Entity

//bi-directional many-to-one association to Report 
@ManyToOne 
@JoinColumn(name="INCIDENT_ID") 
private Report report; 

По некоторым причинам я не могу получить хозяева установить загрузку в память и хостов всегда нуль , Я нашел следующее на StackOverflow должности, но он не работает либо:

public void loadHosts(Report report) 
{ 
    PersistenceUtil unitUtil = getEntityManager().getEntityManagerFactory().getPersistenceUnitUtil(); 
    System.out.println("isLoaded(report, \"hosts\"): " + unitUtil.isLoaded(report, "hosts")); 
    initializeCollection(report.getHosts()); 
    System.out.println("isLoaded(report, \"hosts\"): " + unitUtil.isLoaded(report, "hosts")); 
} 

private void initializeCollection(Collection<?> collection) 
{ 
    if(collection == null) 
    { 
     return; 
    } 
    collection.iterator().hasNext(); 
} 

Вывод из вышеизложенного:

SystemOut  O isLoaded(report, "hosts"): false 
SystemOut  O isLoaded(report, "hosts"): false 

Есть идеи?

ответ

0

Я думаю, вам нужно вызвать getHosts между session.get (object) и tx.commit. Или вы также можете использовать fetch = FetchType.EAGER (хотя это не выгодно)

+0

В этом случае я читаю существующий отчет из базы данных. Отчет и связанные с ним хосты были записаны в базу данных с использованием этих объектов. Я попытался вызвать report.getHosts(), и делаю это в приведенном выше коде в строке: initializeCollection (report.getHosts()); – bnorwood

+0

Мне жаль, я пропустил эту линию. –

+0

Помог ли fetchtype.eager? –

Смежные вопросы