Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine java.lang.IllegalStateException,“;父类型的对象的主键为null;除非我可以打印它并且它不是空的_Google App Engine_Persistence_Jdo_Datanucleus - Fatal编程技术网

Google app engine java.lang.IllegalStateException,“;父类型的对象的主键为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

我想不出还有什么办法能解决我的问题。下面是我昨天制作的一个线程,详细描述了父类和子类:

我试图添加一个Truck并将其持久化,但是持久化管理器坚持父项的主键为NULL,即使我在持久化子项之前记录了该值,并且父项不为NULL,事实上它也是有效的键,应该设置它。为什么持久性经理看到了我没有看到的东西

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插件