Nhiều ràng buộc duy nhất trong JPA


84

Có cách nào để chỉ định bằng JPA rằng phải có nhiều ràng buộc duy nhất trên các tập hợp cột khác nhau không?

@Entity
@Table(name="person", 
       uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"}))
public class Person {
    // Unique on code and uid
    public String code;
    public String uid;

    // Unique on username
    public String username;

    public String name;
    public String email;
}

Tôi đã thấy một chú thích cụ thể về chế độ ngủ đông nhưng tôi đang cố gắng tránh các giải pháp cụ thể của nhà cung cấp vì chúng tôi vẫn đang quyết định giữa chế độ ngủ đông và hạt nhân dữ liệu.

Câu trả lời:


130

Các @Tablethuộc tính 's uniqueConstraintsthực sự chấp nhận một mảng trong số này. Ví dụ của bạn chỉ là cách viết tắt cho một mảng có một phần tử duy nhất. Ngược lại, nó sẽ giống như sau:

@Table(name="person",  uniqueConstraints={
   @UniqueConstraint(columnNames={"code", "uid"}),
   @UniqueConstraint(columnNames={"anotherField", "uid"})
})

Bất cứ khi nào ràng buộc duy nhất chỉ dựa trên một trường, bạn có thể sử dụng @Column(unique=true)trên cột đó.


2
Tôi hiện có chú thích này, nhưng có vẻ như Hibernate không tạo chỉ mục cho bảng cho dù bảng đã tồn tại (và nó được thiết lập để cập nhật) hoặc nếu tôi xóa bảng và để Hibernate tự động tạo nó. Tui bỏ lỡ điều gì vậy?
Kevin M
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.