JPA 2 @JoinTable с генерацией ключей

Есть ли способ в JPA 2 использовать @JoinTable для создания ключа UUID для идентификатора строки? Я не хочу создавать новую сущность для этой таблицы (даже если это решит проблему) и не хочу создавать ее из БД.

    @ManyToMany
    @JoinTable(name="Exams_Questions", schema="relation",
            joinColumns = @JoinColumn(name="examId", referencedColumnName="id"),
            inverseJoinColumns = @JoinColumn(name="questionId", referencedColumnName = "id"))   
    private List<Question> questions = new ArrayList<Question>();

таблица БД

CREATE TABLE [relation].[Exams_Questions](
    [id] [uniqueidentifier] PRIMARY KEY NOT NULL,
    [examId] [uniqueidentifier] NOT NULL,
    [questionId] [uniqueidentifier] NOT NULL,

person Marthin    schedule 24.03.2013    source источник
comment
Заданный вопрос трудно понять из-за грамматических проблем.   -  person Richard Sitze    schedule 24.03.2013


Ответы (1)


Не совсем уверен, что это за вопрос, но позвольте мне попробовать ответить.

Только для вашего первого предложения я бы сказал «Да» и «Возможно»:

  1. Вам понадобится отдельный @Entity class для Question, и в этом классе вы должны указать сопоставление для id.

  2. Невозможно использовать спецификацию JPA для указания автоматического создания значения UUID для столбца. Существуют способы использования OpenJPA и Hibernate. EclipseLink позволит вам создать собственный генератор для этой цели и его пример на самом деле, для UUID.

Если вы хотите открыть свойства соединяемой таблицы ИЛИ иным образом поручить JPA управлять ими (например, id в таблице Exams_Questions), см. этот внешний ссылка (находится в этом ответе). Вы получите отношения @OneToMany от сущностей Exam/Question к таблице соединения и отношения @ManyToOne от таблицы соединения к сущностям Exam/Question.

Предоставление таблицы соединения как объекта позволит вам управлять отдельным ключом (uuid). Если вам не нужен первичный ключ uuid, не делайте этого - это не обязательно для решения проблемы, так как комбинация examId/questionId уникальна.

person Richard Sitze    schedule 24.03.2013
comment
Примечание. EclipseLink 2.4 поддерживает UUID с использованием @UuidGenerator. - person James; 25.03.2013