hibernate: LazyInitializationException, использующий netbeans и JSF - PullRequest
0 голосов
/ 22 марта 2012

Я использую netbeans 7.1, glassfish 3.1.1 и hibernate 4.01 Я использую файлы JSF, сгенерированные NetBeans - Facade.java - Controller.java и мои собственные бобы сущности

В моем объекте baseTicket я отобразил следующее

@OneToMany(mappedBy = "baseTicket", cascade = javax.persistence.CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
java.util.List<CustomAttribute> customAttributes;

Если я добавлю аннотацию fetch=EAGER, я смогу получить доступ к customAttributes с веб-страниц JSF. Однако, если я оставлю это как ленивую загрузку, я получу

hibernate: LazyInitializationException

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

Какое лучшее решение?

1 Ответ

0 голосов
/ 22 марта 2012

Если вы не хотите загружать его с нетерпением, вы можете написать именованный запрос для извлечения списка в вашем слое DAO.

Стиль аннотации:

@NamedQueries({
    @NamedQuery(
    name = "findCustomAttributes",
    query = "from CustomAttribute ca where ca.ticket = :ticketId"
    )
})

Здесь я предполагаю, что естьссылка в сущности CustomAttribute to Ticket (@ManyToOne).

В коде вы можете получить результат как

Query query=em.createNamedQuery("findCustomAttributes");
query.setParameter("ticketId", 1);
List CustomAttributesList=query.getResultList(); 

Вы можете использовать этот список, поскольку требуется только то, что вам нужно знать текущий билетid.

Более подробную информацию вы можете получить из

  1. Документов JEE6
  2. Документов Hibernate JPA
...