2011-03-13 15 views
0

我有一個java類中有一個數字標識和用戶名(自然主鍵)的類。休眠標註,如何定義兩個主鍵

我希望Id和用戶名是主鍵(未組合)。

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

我該怎麼用java的hibernate annotations做到這一點?

回答

2

在休眠中只能有一個主鍵(單個字段,複合鍵等)。主要原因是我知道的大多數數據庫只支持單個或複合主鍵。從您的描述中,您聽起來像是在尋找唯一的用戶名。爲此,您不需要將該字段定義爲主鍵列。相反,您可以爲該字段添加一個唯一約束。如果使用註解,那麼你將配置它類似於以下:

@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) 
);