|
|
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
всем привет не могу вьехать в генерацию ид, не хватает познаний в теории рбд. ситуация такая в базу для программы-учетки, первым этапом, конвертируются данные из старой версии, делаю persist() с существующим ид из старой базы. вторым этапом операторы системы добавляют записи (сущности), в них ид автогенерируются. и вот на втором этапе постоянно ловлю ошибку duplicate key value violates unique constraint, Key (id)=(ххх) already exists. почитал СО, сделал собственную для таблицы последовательность: Код: java 1. 2. 3. не помогло. дефолтная @GeneratedValue(strategy = GenerationType.AUTO) тоже не работает. как быть? можно или нельзя совместить автогенерацию ид с возможность использовать существующий ид без генерации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 07:54 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
Юрий321, Вашу проблему надо решить на уровне RDBMS, а потом уже просто применить решение в JPA. JPA решением этой проблемы не занимается. Какая у вас база? Как у вас настроены первичные ключи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 08:55 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЮрий321, Вашу проблему надо решить на уровне RDBMS, а потом уже просто применить решение в JPA. JPA решением этой проблемы не занимается. Какая у вас база? Как у вас настроены первичные ключи? постгрес. ключи никак не сконфигурированы. создана пустая база + юзер. в persistence.xml есть проперти Код: xml 1. таблицы генерируются из сущностией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 09:02 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
Юрий321таблицы генерируются из сущностией. Этот вариант годится только для черновой прототипизации. Для полноценной системы дизайн БД должен делать разработчик. Если вы не смыслите в базах, то ORM вам не помошник от слова "вообще". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 09:07 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
Юрий321, GenerationType.AUTO зависит от каждой конкретной базы. На сколько я понимаю в postgres должен быть serial PK, либо sequence + trigger. Но в этом случае для вставки значения PK нужно мучатся с отключение генерации. GenerationType.SEQUENCE может заработать. Только работать оно будет без триггера. Если использовать Hibernate, то с ним есть и ещё варианты. В любом случае базу данных надо создать руками. Совершенно не факт, что ORM для вас создаст правильную структуру таблиц и sequence. Для поддержки структуры БД в актуальном состоянии удобно пользоваться инструментами миграции Liquibase или Flyway. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 09:14 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
>можно или нельзя совместить автогенерацию ид с возможность использовать существующий ид без генерации? в постгре auto_increment работает через SEQUENCE и nextval. следовательно при инсерте нужно работать только с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 09:52 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
breath>можно или нельзя совместить автогенерацию ид с возможность использовать существующий ид без генерации? в постгре auto_increment работает через SEQUENCE и nextval. следовательно при инсерте нужно работать только с ним. то есть делать инсерт с ид с потолка нельзя? вцелом понял. нужно разделить задачу на два этапа, импорт старых данных + переход на ввод данных операторами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 09:58 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
breathв постгре auto_increment работает через SEQUENCE и nextval. http://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-SERIAL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 10:07 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
breathи ? и не только ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 10:12 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
секвенсы сделаны специально для получения последовательных уникальных значений. при создании serial поля автоматически создается соответствующий sequence.. и при дропе таблицы севенс дропается автоматом. тс`у https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Sequence_Strategies ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 10:27 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
Юрий321то есть делать инсерт с ид с потолка нельзя? Можно. Юрий321вцелом понял. нужно разделить задачу на два этапа, импорт старых данных + переход на ввод данных операторами. Именно так. Вам надо импортировать существующие данные, потом средствами базы создать последовательность с начальным значением больше максимального id из загруженных , а дальше уже использовать ее не боясь duplicate key value violates И уберите initialValue = 1 из @SequenceGenerator. Это нужно если таблицы и последовательности вам JPA(Hibrnate) создает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 14:21 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
mrWolfЮрий321то есть делать инсерт с ид с потолка нельзя? Можно. Юрий321вцелом понял. нужно разделить задачу на два этапа, импорт старых данных + переход на ввод данных операторами. Именно так. Вам надо импортировать существующие данные, потом средствами базы создать последовательность с начальным значением больше максимального id из загруженных , а дальше уже использовать ее не боясь duplicate key value violates И уберите initialValue = 1 из @SequenceGenerator. Это нужно если таблицы и последовательности вам JPA(Hibrnate) создает. ага, так и сделал. теперь такой вопрос, как грамотнее минимизировать потенциальные проблемы - создавать по сиквенсу на каждую таблицу с ид, или использовать дефолтный, один сиквенс на все таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 14:42 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
Юрий321, Используйте serial и не парьтесь. Конечно же sequence на каждую таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 14:43 |
|
||
|
JPA стратегия генерации id
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЮрий321, Используйте serial и не парьтесь. Конечно же sequence на каждую таблицу. понял. непонятно, зачем так сделано по дефолту, ид поле создается не сериал, и один общий сиквенс на всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 14:48 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39177787&tid=2124338]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
180ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 546ms |

| 0 / 0 |
