1

我无法想象任何更多的方法来解决我的问题。这是我昨天做的一个线程,详细描述了父类和子类: https ://stackoverflow.com/questions/3800450/many-to-one-unidirectional-gae-jdo-relationship-amongst-entities

我正在尝试添加卡车并将其持久化,但持久性管理器坚持认为父项的主键为 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.
4

2 回答 2

1

也许父母不是持久状态,而是分离的?还是瞬态的?为什么不打印出对象的状态

于 2010-10-02T10:06:41.150 回答
1

也许父母和孩子由不同的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
于 2011-07-30T16:15:53.110 回答