java.lang.IllegalStateException, первичный ключ для объекта типа Parent имеет значение null, за исключением того, что я могу распечатать его, а его значение NOT null

Я не могу представить себе никаких других методов решения моей проблемы. Вот поток, который я создал вчера, в котором подробно описываются родительский и дочерний классы: "> https://stackoverflow.com/questions/3800450/many-to-one-unidirectional-gae-jdo-relationship-среди-объектов

Я пытаюсь добавить Truck и сохранить его, но менеджер постоянства настаивает на том, что первичный ключ родительского элемента равен 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.

person D-Nice    schedule 28.09.2010    source источник
comment
Очевидно, что у любого исключения есть трассировка стека, чтобы сказать, кто его выдает... вероятно, плагин GAE/J   -  person DataNucleus    schedule 29.09.2010


Ответы (2)


возможно, родитель не является постоянным состоянием, а отсоединен? или переходный? почему бы не распечатать состояние объекта

person user383680    schedule 02.10.2010

Возможно, родительский и дочерний элементы управляются разными 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
person dipicore    schedule 30.07.2011