У меня проблема с моим проектом.Действительно, у меня есть:
@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, и я не столкнулся с проблемой.
Это настолько далеко, насколько я смог.Я до сих пор не знаю, почему это происходит.