Hibernate Аннотация, как определить два первичных ключа - PullRequest
0 голосов
/ 13 марта 2011

У меня есть класс в Java, который имеет числовой идентификатор и имя пользователя (первичный ключ природы).

Я хочу, чтобы идентификатор и имя пользователя были первичными ключами (не объединенными).

Create table (
    Int ID PK,
    String Username PK,
    String name,
    String password
) 

Как я могу сделать это с аннотациями гибернации для Java?

1 Ответ

2 голосов
/ 13 марта 2011

В спящем режиме вы можете иметь только один первичный ключ (одно поле, составной ключ и т. Д.). Основная причина в том, что большинство известных мне баз данных поддерживают только одиночные или составные первичные ключи. Из вашего описания это звучит так, как будто вы действительно ищете уникальное имя пользователя. Для этого вам не нужно определять поле как столбец первичного ключа. Вместо этого вы можете добавить уникальное ограничение к этому полю. Если вы используете аннотации, вы можете настроить его следующим образом:

@Table(name="table",
    uniqueConstraints = {@UniqueConstraint(columnNames={"username"})}
)

Если генерировать таблицы базы данных из конфигурации hibernate, это определило бы уникальное ограничение для столбца имени пользователя в вашей таблице, а также первичный ключ id. Если вы вручную создаете схему базы данных, то вы захотите добавить ограничение в базу данных самостоятельно. Вот пример для Oracle:

CREATE TABLE table
(       id          numeric(10)   not null,
        username    varchar2(50)  not null,
        primary key (id),
        CONSTRAINT username_unique UNIQUE (username)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...