Google App Engine / JPA - управляемый объект A нового объекта B снова вставляется в хранилище данных - PullRequest
0 голосов
/ 03 сентября 2011

У меня проблема с моим проектом.Действительно, у меня есть:

@Entity
public class Cast {
    //[...]
    @ManyToOne(cascade = {CascadeType.PERSIST})
    private Event relatedEvent;
    //[...]
}

и

@Entity
public class Event {
    //[...]
}

Всякий раз, когда я пытаюсь сохранить новый экземпляр Cast, член Event которого уже управляется и сохраняется, создается новая запись Event.в любом случае (так что я постоянно получаю новые события).

Пользовательский PropertyEditor (Spring) позволяет извлекать событие по заданному строковому значению.Затем приведение продолжается после нескольких вызовов (ничего особенного):

EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.persist(cast);
entityManager.close();

entityManagerFactory - это синглтон, управляемый контейнером Spring.

Любые мысли о том, почему события сохраняютсяснова, когда связаны с новым исполнением?

Заранее спасибо за помощь!

Рольф

PS: Я запустил отладчик и не нашел никакой информации.


ОБНОВЛЕНИЕ 09/09

Я мог бы найти более подробную информацию об ошибке.Вот код, который извлекает экземпляр Event из хранилища данных:

public Event findById(long id) {
    EntityManager entityManager = entityManagerFactory.createEntityManager();
    Key key = KeyFactory.createKey(Event.class.getSimpleName(), id);
    Event result = entityManager.find(Event.class, key);
    entityManager.close();
    return result;
}

Идентификаторы объявляются таким образом (как в Cast, так и в Event):

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key id;

Когда только 1 событиесохраненный, entityManager.find фактически возвращает событие.Однако, как описано ранее, приведение сохраняется вместе с новым событием.

Когда я пытаюсь создать приведение снова после первого создания приведения с событием, entityManager.find возвращает ноль, хотя ключдействителен и существует в хранилище данных.

У меня действительно похожий код для извлечения Cast, и я не столкнулся с проблемой.

Это настолько далеко, насколько я смог.Я до сих пор не знаю, почему это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...