Как да инжектирате идентификатори на персонализирани обекти в JPA обекти

Използвам JPA 2 за корпоративно приложение и моите DBA просто ме удариха с обрат.

Те искат от мен да използвам централизирания генератор на ID на обекти на групата за всички мои таблици. Това означава, че вместо да използвам таблични стойности или таблица с последователности, ще трябва да се обадя на уеб услуга, за да получа партида от ~50 идентификатора.

След това, тъй като поддържам всеки нов обект, ще трябва първо да инжектирам този идентификатор и да го запазя в таблицата.

И така, как бих манипулирал колоната @Id на обект, за да се справя с това.

Толкова просто ли е като задаване на ключ, преди да настоявам? Подозирам, че това би хвърлило някакъв вид неуправляван обект с грешка при зададен идентификатор.


person Eddie    schedule 25.08.2010    source източник
comment
Съжалявам, трябваше да отбележа, че използвам OpenJPA като внедряване на спецификацията jpa2.   -  person Eddie    schedule 25.08.2010


Отговори (1)


Актуализация:

По-добрият метод е действително да посочите стратегия за последователност върху генерирани полета и да посочите персонализиран клас последователност.

След това JPA ще извиква метода nextId() на този клас всеки път, когато вмъкне нов обект.

Този метод позволява да се поддържат пълни графики, без да се намесва ръчно върху всеки обект.


Разбрах го. Удивително сложно ;) - просто премахнете анотацията GeneratedValue от ключовото поле.

Предназначен е за собствени идентификатори като SSN или имейл, но работи независимо от източника.

@Entity
public class Client{

    @Id
    @Column(name="CLNT_ID") 
    private long key;
    @Column(name="CLNT_NUM")
    private String clientNumber;
...
}
person Eddie    schedule 25.08.2010