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