Google app engine java.lang.IllegalStateException,“;父类型的对象的主键为null;除非我可以打印它并且它不是空的
我想不出还有什么办法能解决我的问题。下面是我昨天制作的一个线程,详细描述了父类和子类: 我试图添加一个Truck并将其持久化,但是持久化管理器坚持父项的主键为NULL,即使我在持久化子项之前记录了该值,并且父项不为NULL,事实上它也是有效的键,应该设置它。为什么持久性经理看到了我没有看到的东西Google app engine java.lang.IllegalStateException,“;父类型的对象的主键为null;除非我可以打印它并且它不是空的,google-app-engine,persistence,jdo,datanucleus,Google App Engine,Persistence,Jdo,Datanucleus,我想不出还有什么办法能解决我的问题。下面是我昨天制作的一个线程,详细描述了父类和子类: 我试图添加一个Truck并将其持久化,但是持久化管理器坚持父项的主键为NULL,即使我在持久化子项之前记录了该值,并且父项不为NULL,事实上它也是有效的键,应该设置它。为什么持久性经理看到了我没有看到的东西 try{ if (!findTruck(truck)){ _logger.warning("get tweeter key " + truck.getTw
try{
if (!findTruck(truck)){
_logger.warning("get tweeter key " + truck.getTweeter().getEncodedKey());
pm.makePersistent(truck);
}
}
finally {
pm.close();
}
从日志中:
09-27 06:37PM 12.158
com.google.truxmap.server.TruckJdoDAO addTruck: get tweeter key agp0cnV4bWFwcGVych8LEgdUd2VldGVyIhJrZXltdW5jaGllbWFjaGluZTEM
W 09-27 06:37PM 12.160
com.google.truxmap.server.TruckJdoDAO addTruck: addTruck exception: class java.lang.IllegalStateException. Message:Primary key for object of type Tweeter is null.
也许父级不是持久状态,而是分离状态?还是短暂的?为什么不打印出对象的状态可能父对象和子对象由不同的ObjectManager管理。如果使用java,请确保父级和子级由同一个管理器(PersistenceManager)管理。下面的代码将引发此异常
PersistenceManager pm = JDOHelper.getPersistenceManagerFactory("transactions-optional");
Parent parent = (Parent)pm.getObjectById(Parent.class, parentKey);
pm.close();
// New object manager
pm = JDOHelper.getPersistenceManagerFactory("transactions-optional");
Child child = new Child();
child.setParent(parent);
pm.makePersistent(child); // Exception here
显然,任何异常都有一个堆栈跟踪来说明是谁抛出它。。。可能是GAE/J插件