Jac*_*cob 5 java google-app-engine jdo
我正在学习GAE并且有点卡住了.如果我使用以下内容,最后确保持久性管理器已关闭,那么在尝试实际读取Note对象时会出现异常:
public class Notes {
public List<Note> getAll() {
PersistenceManager pm = PMF.instance().getPersistenceManager();
try {
Query query = pm.newQuery("select from com.uptecs.google1.model.Note order by subject");
return (List<Note>) query.execute();
} finally {
pm.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的例外是:
Object Manager has been closed
org.datanucleus.exceptions.NucleusUserException: Object Manager has been closed
at org.datanucleus.ObjectManagerImpl.assertIsOpen(ObjectManagerImpl.java:3876)
at org.datanucleus.ObjectManagerImpl.getFetchPlan(ObjectManagerImpl.java:376)
at org.datanucleus.store.query.Query.getFetchPlan(Query.java:497)
Run Code Online (Sandbox Code Playgroud)
尝试使用以下方法从图中分离对象detachable="true":
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Note {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long key;
...
}
Run Code Online (Sandbox Code Playgroud)
注意:我完全理解需要这样做,有时你需要在控制器中检索对象和列表,关闭控制器中的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;
}
Run Code Online (Sandbox Code Playgroud)
按键:
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;
}
Run Code Online (Sandbox Code Playgroud)
结束后,你有一个独立的副本,你可以使用它.
参考:http://www.datanucleus.org/products/accessplatform_1_1/jdo/attach_detach.html
| 归档时间: |
|
| 查看次数: |
3010 次 |
| 最近记录: |