Až Vám zčerná obrazovka, přejděte na Linux!

Proč používat Linux

pondělí 7. dubna 2008

IDEA 7, Hibernate a DB generovaná ID

Musím uznat, že ač je práce s Javím perzistorem Hibernate v IntelliJ IDEA celkem přímočará, dostanete se do stejných potíží, jaké u Hibernate mají i ostatní uživatelé. IDEA je přeci jenom vývojový nástroj, ikdyž geniální. Nic míň, ale také nic víc.
Potřeboval jsem qůli klastrovatelnosti nechat databázi generovat IDčka záznamů. V Oracle je to jednoduché, jde to naklikat v Oracle XE konzoli. ve výsledku asi nejkratší možný SQL záznam vypadá:

CREATE TABLE "HIBERTEST"
( "ID" NUMBER,
"DATA" BLOB,
CONSTRAINT "HIBERTEST_PK" PRIMARY KEY ("ID") ENABLE
)

CREATE OR REPLACE TRIGGER "BI_HIBERTEST"
before insert on "HIBERTEST"
for each row
begin
select "HIBERTEST_SEQ".nextval into :NEW.ID from dual;
end;


Pro pouhé uložení záznamu vám stačí nastavit IDčku hodnotu -1 (pro zachování nullable=false) a Oracle to přeplácne za Vás. Potíž nastane v okamžiku, kdy chcete s onou zaperzistentněnou beanou dál pracovat a mít v ní ono ID. Naštěstí bratr Google opět pomohl.
Jean-Pol Landrain napsal velice triviální a nádherný PostInsertGenerator, který to řeší velice elegantně. Podívejte se sami.
Pak stačí entitě v IDEA přidat anotaci

@GeneratedValue(generator="triggerAssigned")
@GenericGenerator(name="triggerAssigned",
strategy = "jpl.hibernate.util.TriggerAssignedIdentityGenerator")

a je vymalováno.

Žádné komentáře: