簡體   English   中英

休眠:使用netbeans和JSF的LazyInitializationException

[英]hibernate: LazyInitializationException using netbeans and JSF

我正在使用netbeans 7.1,glassfish 3.1.1和hibernate 4.01我正在使用netbeans生成的JSF文件-Facade.java-Controller.java和我自己的實體bean

在我的baseTicket實體中,我映射了以下內容

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

如果添加fetch=EAGER批注,則可以從JSF網頁訪問customAttributes。 但是,如果我將其保留為延遲加載,則會得到

hibernate: LazyInitializationException

我已經在網上搜索並嘗試了許多建議-但我無法使它正常工作。 我曾嘗試創建一個實體管理器,但似乎無法成功創建em。

最好的解決方案是什么?

如果您不想急於加載它,可以編寫一個命名查詢以獲取DAO層中的列表。

注釋樣式:

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

在這里,我假設CustomAttribute中有到票證( @ManyToOne )實體的鏈接。

在代碼中,您可以將結果提取為

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

您可以根據需要使用此列表,僅需要知道當前的票證ID。

您可以從中獲得更多信息

  1. JEE6文件
  2. Hibernate JPA文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM