2012-09-06 34 views
0

即時通訊javax.jdo.JDODetachedFieldAccessException當我想,在我的DAO實現中檢索所有我的Entites作爲列表後,請求一個atrribute對象來自我的實體。javax.jdo.JDODetachedFieldAccessException當我要求一個列表<T>使用JPA和數據存儲

public List<T> findAll() { 
    this.entityManager = SingletonEntityManagerFactory.get().createEntityManager(); 
    EntityTransaction tx = this.entityManager.getTransaction(); 
    try { 
     tx.begin(); 
    return this.entityManager.createQuery(
     "select f from " + clazz.getName() + " as f").getResultList(); 

    }finally { 
     tx.commit(); 
     if (tx.isActive()) { 
     tx.rollback(); 
     } 
     this.entityManager.close(); 
    } 

    } 

例如,假設T有A類的屬性,已經是一個實體堅持,我不能有列表

後能找到但我沒有這個問題,如果我只是看對於單個實體的Id。我得到我的實體,我可以不問其屬性的對象問題已經持續

public T getById(final Key id) { 
    return getEntityManager().find(clazz, id); 
} 

現在我可以做

A a= t.getA(); 

我怎麼能寫我實現的findAll(的)避免這種錯誤?也許另一個組件而不是EntityManager?我怎樣才能使它通用,而不必爲特定類型的實體實現特定的代碼?

回答

0

你在那裏做什麼並不能確保在離開該方法之前加載該字段,所以要麼訪問它,要麼確保它在默認情況下被提取。

相關問題