Попробуйте отсоединить объект от графика с помощью detachable="true"
:
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Note {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long key;
...
}
Примечание: Я полностью понимаю необходимость в этом, иногда вам нужно получить объекты и списки в контроллере, закрыть PM в контроллере, а затем передать модели в представления. До тех пор, пока мне не станут известны лучшие решения, я делаю это на JDO / GAE без проблем.
Список:
Мне кажется, что вам придется отсоединить все элементы в списке, если вы хотите иметь возможность использовать их после закрытия PM . Я бы использовал это, чтобы получить конкретные списки предметов. Полный getAll()
может быть очень большим по размеру.
public List<Note> getList(){
List<Note> detachedList=null, list=null;
try {
String query = "select from " + Note.class.getName();
pm = PMF.get().getPersistenceManager();
list = (List<Note>)pm.newQuery(query).execute();
detachedList = new ArrayList<Note>();
for(Note obj : list){
detachedList.add(pm.detachCopy(obj));
}
} finally {
pm.close();
}
return detachedList;
}
По ключу:
public Note findByKey(Long key) {
Note detachedCopy=null, object=null;
try{
pm= PMF.get().getPersistenceManager();
object = pm.getObjectById(Note.class,key);
detachedCopy = pm.detachCopy(object);
}catch (JDOObjectNotFoundException e) {
return null; // or whatever
}
finally {
pm.close(); // close here
}
return detachedCopy;
}
После закрытия у вас есть отдельная копия, с которой вы можете работать.
Ссылка: http://www.datanucleus.org/products/accessplatform_1_1/jdo/attach_detach.html