У меня есть объектная модель, которая сохраняется с использованием Seam и JPA (Hibernate).Это выглядит примерно так:
@Entity(name = "MyObject")
public class MyObject {
...
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_myobj")
@SequenceGenerator(name = "seq_myobj", sequenceName = "seq_myobj")
private Long id = null;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = false)
@NotNull
private MySubObject subObjA=null;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = false)
@NotNull
private MySubObject subObjB=null;
...
}
@Entity(name = "MySubObject")
public class MySubObject {
...
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_mysubobj")
@SequenceGenerator(name = "seq_mysubobj", sequenceName = "seq_mysubobj")
private Long id = null;
}
Я правильно определил свои @ManyToOne
аннотации и все.Однако, если я попытаюсь сохранить экземпляр MyObject
, в котором установлены оба параметра subObjA
и subObjB
, я получу исключение, сообщающее, что у меня есть дублированный первичный ключ, один из подчиненных объектов.Что вызвало бы такое поведение?Оба объекта имеют идентификаторы типа SEQUENCE, и у меня нет проблем, если я устанавливаю один или другой.Только когда я установил оба, я получаю исключение.
Я использую Seam 2.2, а моя внутренняя база данных - PostgreSQL.Есть мысли о том, что может быть причиной этого странного поведения?Я думал, что оба объекта будут сохранены как часть одной транзакции, и что правильные первичные ключи будут назначаться автоматически.Как я уже сказал, если я поставлю только один из объектов, это не проблема.Это происходит только тогда, когда я устанавливаю их обоих.Буду признателен за любую помощь, которую вы можете оказать.
РЕДАКТИРОВАТЬ Однако я заметил странное поведение при тестировании различных вещей.Если я создаю MyObject программно и устанавливаю все его свойства (включая subObj), он сохраняется без проблем.Однако, если я ввожу свойства с помощью формы, я получаю сообщение об ошибке.Может ли это быть как-то связано с транзакциями?