Hibernate Annotation,如何定义两个主键

时间:2011-03-13 00:08:00

标签: hibernate annotations

我在java中有一个具有数字ID和用户名(自然主键)的类。

我希望Id和用户名是主键(未合并)。

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

如何使用Java的hibernate注释?

1 个答案:

答案 0 :(得分:2)

hibernate中只能有一个主键(单个字段,复合键等)。主要原因是我所知道的大多数数据库只支持单个或复合主键。从您的描述中可以看出,您实际上只是在寻找唯一的用户名。为此,您无需将字段定义为主键列。相反,您可以为该字段添加唯一约束。如果使用Annotations,那么您可以将其配置为类似于以下内容:

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

如果从hibernate配置生成db表,则会在表中的username列以及id主键上定义唯一约束。如果要手动创建数据库方案,则需要自己将约束添加到数据库。以下是Oracle的示例:

CREATE TABLE table
(       id          numeric(10)   not null,
        username    varchar2(50)  not null,
        primary key (id),
        CONSTRAINT username_unique UNIQUE (username)
);