Как внедрить идентификаторы пользовательских объектов в объекты JPA

Я использую JPA 2 для корпоративного приложения, и мой администратор баз данных только что поразил меня.

Они хотят, чтобы я использовал централизованный генератор идентификаторов объектов группы для всех своих таблиц. Это означает, что вместо использования табличных значений или таблицы последовательности мне нужно будет вызвать веб-службу, чтобы получить пакет из примерно 50 идентификаторов.

Затем, когда я сохраняю любой новый объект, мне нужно будет сначала внедрить этот идентификатор и сохранить его в таблице.

Итак, как мне манипулировать столбцом @Id объекта, чтобы справиться с этим.

Это так же просто, как установить ключ, прежде чем я буду настаивать? Я подозреваю, что это вызовет какой-то неуправляемый объект с ошибкой набора идентификаторов.


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


Ответы (1)


Обновлять:

Лучший способ — фактически указать стратегию Sequence для сгенерированных полей и указать пользовательский класс Sequence.

Затем 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