Hibernate jaki generator dla Oracle?

0

Witajcie,

Pierwszy raz musze postawić bazę na Oracle i mam drobne problemy z generatorem. W bazie stworzyłem tabele i sekwencje, bez trigerów:

Sekwencja:

CREATED 15/05/27
LAST_DDL_TIME 15/05/27
SEQUENCE_OWNER CRM
SEQUENCE_NAME SLOWNIKI_SEQ
MIN_VALUE 1
MAX_VALUE 999999999999999999999999999
INCREMENT_BY 1
CYCLE_FLAG N
ORDER_FLAG N
CACHE_SIZE 20
LAST_NUMBER 21

Oto kod w hibernacie:

   @Id
    @Column(name = "ID")
    @SequenceGenerator(name="PK",sequenceName="SLOWNIKI_SEQ",allocationSize=1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.AUTO, generator="PK")
    private int id;

Całość działa jednak powoduje pewne ograniczenie. Jeśli zawsze będę dodawał rekordy przez hibernate jest ok, jeśli jednak dodam kolejny rekord bezpośrednio w bazie mam problem z dodaniem kolejnego rekordu prze hibernata.

unique constraint (CRM.SLOWNIKI_PK) violated

Domyślam się że nr sekwencji który widzi hibernate dubluje się z tym dodanym ręcznie. A jako że to klucz główny hibernate nie chce dodać rekordu. Jak ominąć to organicznie chciałbym mieć możliwość dodawania rekordów ręcznie. Przy dodawaniu ręcznie rekordu zwiększać nr sekwencji?

0

Znalzałem rozwiązanie, może pryzda się komuś w przyszłości.

INSERT INTO suppliers
(supplier_id, supplier_name)
VALUES
(supplier_seq.NEXTVAL, 'Kraft Foods');

0

Trochę inaczej. Weź zmień allocationSize na np. 10. Wtedy hibernate wybierze sobie 10 wartości z sekwencji podbijając ją odpowiednio. Ty możesz sobie wtedy w zapytaniu pobrać kolejna wartość bez kombinowania. Kolejnym razem jak hibernate będzie potrzebować kolejnych wartości to zarezerwuje sobie kolejny blok za pobraną przez ciebie wartością.

1 użytkowników online, w tym zalogowanych: 0, gości: 1