Hibernate / JPA и PostgreSQL - первичный ключ? - PullRequest
11 голосов
/ 13 мая 2010

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

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

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

Ответы [ 2 ]

18 голосов
/ 14 мая 2010

GenerationType.IDENTITY

10 голосов
/ 14 мая 2010

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

...