Chú thích @UniqueConstraint trong Java


168

Tôi có một hạt Java. Bây giờ, tôi muốn chắc chắn rằng lĩnh vực này phải là duy nhất.

Tôi đang sử dụng mã sau đây:

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

Nhưng tôi đang gặp một số lỗi:

@UniqueConstraint is dissallowed for this location

Cách thích hợp để sử dụng các ràng buộc độc đáo là gì?

Lưu ý: Tôi đang sử dụng khung chơi.


15
"Nhưng tôi đang nhận được một số lỗi." Luôn xác định lỗi nào bạn gặp phải trong câu hỏi. Bạn có thông tin liên quan rất có thể giúp chúng tôi giải quyết vấn đề của bạn - đừng giữ nó cho riêng bạn.
Jon Skeet

Có thể sử dụng chú thích @id không?
Cá bạch tạng

Câu trả lời:


414

Để đảm bảo giá trị trường là duy nhất bạn có thể viết

@Column(unique=true)
String username;

Chú thích @UniqueConstraint là để chú thích nhiều khóa duy nhất ở cấp bảng, đó là lý do tại sao bạn gặp lỗi khi áp dụng nó vào một trường.

Tài liệu tham khảo (JPA TopLink):


17
Điều quan trọng cần lưu ý là nó sẽ chỉ hoạt động nếu bạn để JPA tạo các bảng của mình
naoru

118

Bạn có thể sử dụng ở cấp lớp với cú pháp sau

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

41

Hiện tại tôi cũng đang sử dụng khung chơi với chế độ ngủ đông và chú thích JPA 2.0 và mô hình này hoạt động mà không gặp vấn đề gì

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

}

Hy vọng nó sẽ giúp.


20

Lưu ý: Trong Kotlin, cú pháp khai báo các mảng trong chú thích sử dụng arrayOf(...)thay vì{...}

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

Lưu ý: Kể từ Kotlin 1.2, có thể sử dụng [...]cú pháp để mã trở nên đơn giản hơn nhiều

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

13

Cách 1:

@Entity

@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames = "column1"),@UniqueConstraint(columnNames = "column2")})

- Ở đây cả Cột1 và Cột2 hoạt động như các ràng buộc duy nhất riêng biệt. Ví dụ: nếu bất kỳ lúc nào giá trị của giá trị cột1 hoặc cột2 khớp thì bạn sẽ gặp Lỗi UNIQUE_CONSTRAINT.

Cách 2:

@Entity

@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames ={"column1","column2"})})

- Ở đây cả hai giá trị kết hợp cột1 và cột2 hoạt động như các ràng buộc duy nhất


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

   }

Các ràng buộc duy nhất chỉ được sử dụng để tạo khóa tổng hợp, sẽ là duy nhất. Nó sẽ biểu diễn bảng dưới dạng khóa chính được kết hợp là duy nhất.


3

bạn có thể sử dụng @UniqueConstraint ở cấp độ lớp, cho khóa chính kết hợp trong một bảng. ví dụ:

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

lớp công khai ProductAttribution {}


1

Chú thích duy nhất nên được đặt ngay phía trên khai báo thuộc tính. UniqueContraint đi vào chú thích @Table phía trên khai báo lớp dữ liệu. Xem bên dưới:

@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?,
)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.