У меня следующая ситуация: скажем, у меня есть сущность «Событие», которая содержит набор объектов сущности «Поместить» с отображением @OneToMany.
@Entity
public class Event {
@Id
@GeneratedValue(strategy=Generation.AUTO)
@JoinColumn
private Long id = 0L;
@OneToMany(cascade=CascadeType.ALL, fetch=Fetch.EAGER)
@JoinColumn(name="event_id")
@org.hibernate.annotations.Cascade (value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<Place> places = new HashSet<Place>();
}
@Entity
public class Place {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@JoinColumn
private Long id = 0L;
private String name;
private Long placeId = 0L;
}
Я также работаю с Spring 3.X и использую AnnotationSessionFactoryBean в качестве фабрики сессий. Обе сущности правильно перечислены в свойстве annotatedClasses этого класса.
Я создаю (через свое веб-приложение) новое событие с местом и сохраняю. Как и ожидалось, в таблице событий и мест есть новая запись. Затем я создаю еще одно новое событие с тем же местом, что и первое событие. На этот раз, когда я пытаюсь сохранить, я получаю исключение NonUniqueObjectException. Первичный ключ первого места отмечается как проблема. Похоже, что "новый" идентификатор не создается для второго места. Другими словами, это повторное использование идентификатора. Я ожидаю создания второй строки в таблице мест, но это не так.
Есть мысли?