Я пытаюсь реализовать некоторые основные объекты с помощью Hibernate/JPA. Первоначально код был развернут на MySQL и хорошо работал. Теперь, я портирую его для использования PostgreSQL. В MySQL мой класс объекта определяет свой первичный ключ как автоувеличивающее длинное значение со следующим синтаксисом:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
Однако я нашел, что получаю ошибки с PostgreSQL, когда я пытаюсь вставить многочисленные записи за один раз. Чем я должен аннотировать свой первичный ключ получить то же поведение автопостепенного увеличения в PostgreSQL, как я имею с MySQL? Спасибо за любую справку можно обеспечить!
Я решил проблему. Раньше - в моей реализации MySQL - я использовал абстрактный базовый класс со следующей сигнатурой:
@MappedSuperclass
public abstract class AbstractDomainEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id = null;
...
}
... а затем я расширил его в каждой из моих оставшихся сущностей. С тех пор я вставил этот атрибут в сами сущности и настроил @GenerationType как SEQUENCE. Например:
public class UserProfileBean extends AbstractIdentifiedDomainEntitiy {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "profile_seq")
@SequenceGenerator(name = "profile_seq", sequenceName = "profile_seq")
private Long id = null;
...
}
Таким образом, правильные последовательности будут сгенерированы и использованы в Hibernate / JPA и PostgreSQL. Раньше, даже если я объявлял GenerationType как Sequence, ничего не создавалось. Спасибо за вашу помощь и советы в этом вопросе!