我有 javax.jdo.JDODetachedFieldAccessException,当我想在我的 DAO 实现中将我的所有实体作为列表检索后,从我的实体中请求一个属性对象。
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 类的属性,该属性已经是一个实体持久化,在 List 之后我无法获得 A
但是,如果我只按 ID 查找单个实体,我就没有这个问题。我获得了我的实体,我可以毫无问题地询问它的属性对象已经存在
public T getById(final Key id) {
return getEntityManager().find(clazz, id);
}
现在我可以做
A a= t.getA();
如何编写 findAll() 的实现以避免此错误?也许是另一个组件而不是 EntityManager?我怎样才能使它通用,而不必为特定类型的实体实现特定代码?