Подтвердить что ты не робот

Hibernate/JPA и PostgreSQL - первичный ключ?

Я пытаюсь реализовать некоторые базовые объекты, используя Hibernate/JPA. Первоначально код был развернут в MySQL и работал нормально. Теперь я переношу его на использование PostgreSQL. В MySQL мой сущностный класс определяет свой первичный ключ как автоматически увеличивающееся значение с последующим синтаксисом:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

Однако, я обнаружил, что получаю ошибки в PostgreSQL, когда я пытаюсь вставлять сразу несколько записей. Что мне нужно, чтобы аннотировать мой первичный ключ, чтобы получить такое же автоматически увеличивающееся поведение в PostgreSQL, как у меня с MySQL? Спасибо за любую помощь, которую вы можете предоставить!

4b9b3361

Ответ 1

Я решил проблему. Ранее - в моей реализации 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 как последовательность, никто не создавался. Спасибо за вашу помощь и советы в этом вопросе!

Ответ 2

GenerationType.IDENTITY