JPA IdGeneration стратегия AUTO - PullRequest
       28

JPA IdGeneration стратегия AUTO

0 голосов
/ 04 апреля 2011

Я хочу иметь сущность со стратегией AUTO IdGeneration, мне нужно, чтобы она работала как на Oracle, так и на MySQL, и мне нужно указать имена последовательностей для каждого права в случае Oracle.

Когда я аннотирую первичный ключ как:

@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO, generator="sequence")

У меня есть ошибка на MySQL, что генератор последовательности неизвестен.

и если я использую

@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO)

Я не могу указать имя последовательности для каждой таблицы. Это способ решить эту проблему?

Я использую Hibernate в качестве поставщика JPA

Ответы [ 2 ]

0 голосов
/ 13 октября 2015

Для аннотации @GeneratedValue(strategy = GenerationType.AUTO) поставщик сохраняемости JPA выберет подходящую стратегию для конкретной базы данных. Для базы данных Oracle это будет SEQUENCE, и, если вы ничего не укажете, Hibernate будет использовать одну глобальную последовательность, т.е. hibernate_sequence.

@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="seq_gen_default")
@SequenceGenerator(name="seq_gen_default", sequenceName="ENTITY_SEQ")
private Long id;
0 голосов
/ 05 апреля 2011

Вы объявляете поле id как:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,
    generator = "LegacyIdGenerator")
@GenericGenerator(
    name = "LegacyIdGenerator",
    strategy = "com.backend.hibernate.PenetratingIdGenerator")

, где PenetratingIdGenerator - это пользовательский интерфейс идентификатора реализованного генератора идентификаторов.Теперь вы можете генерировать ID, как вы хотите, в зависимости от вашей базы данных.В любом случае ваше приложение будет знать, какая база данных лежит в основе, потому что вам нужно определить различные диалекты и т. Д. В конфигурационных файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...