Ошибка размера предварительного выделения Postgres + EJB3 - PullRequest
2 голосов
/ 28 февраля 2012

У меня проблема с последовательностью в postgres и jpa

Caused by: javax.persistence.EntityExistsException:
Exception Description: The sequence named [shp_users_seq] is setup incorrectly.  Its increment does not match its pre-allocation size.
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:443)
        at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)
        at base.data.provider.beans.session.DAOImpl.createUser(DAOImpl.java:18)

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Правило: размер приращения последовательности - это значение allocSize в jpa: у меня была эта настройка: что неверно:

@SequenceGenerator(name = "User_Seq_Gen", 
                   sequenceName = "shp_users_seq", allocationSize=999)

исправлено в соответствии с этим:

@SequenceGenerator(name = "User_Seq_Gen", 
                   sequenceName = "shp_users_seq" ,allocationSize=1)

потому что размер приращения последовательности равен 1:

 shopper=> \d shp_users_seq;
        Sequence "public.shp_users_seq"
    Column     |  Type   |        Value
---------------+---------+---------------------
 sequence_name | name    | shp_users_seq
 last_value    | bigint  | 1
 start_value   | bigint  | 1
 increment_by  | bigint  | 1
 max_value     | bigint  | 9223372036854775807
 min_value     | bigint  | 1
 cache_value   | bigint  | 1
 log_cnt       | bigint  | 0
 is_cycled     | boolean | f
 is_called     | boolean | t
0 голосов
/ 28 февраля 2012

Попробуйте установить начальное значение для последовательности как минимум того же размера, который вы используете для атрибута allocSize аннотации @ SequenceGenerator .

 CREATE SEQUENCE seq_name
 ...
 START WITH 100;

Подробнее см. http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg03461.html.

...