2010-06-27 72 views
106

我有一個Java bean。現在,我想確定該字段應該是唯一的。 我使用下面的代碼:Java中的@UniqueConstraint註釋

@UniqueConstraint(columnNames={"username"}) 
public String username; 

,但我收到的一些錯誤:

@UniqueConstraint is dissallowed for this location 

請告訴我正確的方式使用唯一約束?

注:我使用的是玩框架。

+11

「但是有一些錯誤。 *總是*指定您在問題中遇到的錯誤。你有相關的信息可能會很好地幫助我們解決你的問題 - 不要把它留給自己。 – 2010-06-27 08:09:26

+0

是否可以使用@id註釋? – Albinoswordfish 2010-06-27 08:09:26

+0

我現在發佈了錯誤 – xyz 2010-06-27 08:13:40

回答

276

爲了確保字段值是唯一的,你可以寫

@Column(unique=true) 
String username; 

的@UniqueConstraint註釋是在表級別,這就是爲什麼你把它應用到現場時,得到一個錯誤註釋多個唯一鍵。

引用(JPA的TopLink):

71

您可以在類級別使用與我目前使用遊戲框架下面的語法

@Entity 
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})}) 
public class SomeEntity { 
    @Column(name = "username") 
    public String username; 
} 
27

還有hibernate和JPA 2.0註釋和這個模型作品沒有問題

@Entity 
@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"id_1" , "id_2"})}) 
public class class_name { 

@Id 
@GeneratedValue 
public Long id; 

@NotNull 
public Long id_1; 

@NotNull 
public Long id_2; 

} 

希望它有幫助。

3
@Entity @Table(name = "stock", catalog = "mkyongdb", 
    uniqueConstraints = @UniqueConstraint(columnNames = 
    "STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public 
    class Stock implements java.io.Serializable { 

    } 

唯一約束只用於創建組合鍵,它將是唯一的。它將表示爲主鍵組合爲唯一的表。

9

注:在科特林用於註釋聲明陣列中的語法使用的arrayOf(...)代替{...}

@Entity 
@Table(uniqueConstraints=arrayOf(UniqueConstraint(columnNames=arrayOf("book", "chapter_number")))) 
class Chapter(@ManyToOne var book:Book, 
       @Column var chapterNumber:Int) 

注:作爲科特林1.2的其是可使用[...]語法所以代碼變簡單得多

@Entity 
@Table(uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])]) 
class Chapter(@ManyToOne var book:Book, 
       @Column var chapterNumber:Int) 
2

你可以在類級別使用@UniqueConstraint,用於組合初步ry鍵在一張桌子裏。例如:

@Entity 
@Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = { 
     @UniqueConstraint(columnNames = {"PRODUCT_ID"}) }) 

公共類ProductAttribute {}

0

獨特的註釋應右屬性聲明之上放置。 UniqueContraints進入數據類聲明上方的@Table註釋。如下所示:

@Entity @Table(uniqueConstraints= arrayOf(UniqueConstraint(columnNames = arrayOf("col_1", "col_2")))) data class Action( @Id @GeneratedValue @Column(unique = true) val id: Long?, val col_1: Long?, val col_2: Long?, )