2015-05-26 14 views
13

Giả sử tôi đang gặp khó 'chủ đề' bảngJPA - @Column (unique = true) - Điểm thực sự có thuộc tính 'duy nhất' là gì?

CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**) 

và liên quan đến đối tượng Lập bản đồ thì

@Entity 
@Table(name="subject") 
public class SubjectDO { 
    @Id 
    @Column(name="id") 
    int id; 

    @Column(name="name", unique=true) 
    String name; 
    ... 
    // Getter-Setter methods 
} 

Khi tôi cố gắng tiết kiệm đối tượng có lặp lại 'tên' có và không có 'độc đáo = true' định nghĩa, Tôi nhận được hành vi tương tự (cùng một ngoại lệ.) Và rõ ràng là thực hiện JPA không thể thực sự làm bất cứ điều gì trừ khi liên hệ với DB để kiểm tra.

Trường hợp sử dụng thực sự cho nó là gì?

(Tôi giả định ở đây, hạn chế duy nhất được xác định ở cấp cơ sở dữ liệu quá.)

Trả lời

29

unique trong @Column chỉ được sử dụng nếu bạn cho nhà cung cấp JPA của bạn tạo ra các cơ sở dữ liệu cho bạn - nó sẽ tạo ra sự hạn chế duy nhất trên cột được chỉ định. Nhưng nếu bạn đã có cơ sở dữ liệu, hoặc bạn thay đổi nó sau khi tạo ra, sau đó unique không có bất kỳ tác dụng.

+0

Cảm ơn! Tôi đã cố gắng tìm sự liên quan của nó trong thời gian chạy .. Chúng tôi có bất kỳ tài nguyên trực tuyến nào ngắn gọn về các chú thích cụ thể của DDL không? Tôi đã cố gắng tìm kiếm nó nhưng không tìm thấy nó .. –

+0

Kiểm tra phần 11.2 trong [Đặc tả JPA] (http://download.oracle.com/otndocs/jcp/persistence-2_1-edr2-spec/index.html), nó liệt kê tất cả chú thích và thuộc tính của chúng được quan sát thấy trong quá trình tạo lược đồ. –

+0

Điều này rất hữu ích .. Cảm ơn bạn! –

9

unique=true trong column chú thích sẽ chỉ được sử dụng trong DDL generation, nó không có bất kỳ tác động trong runtime, kiểm tra tính độc đáo thực tế xảy ra trong database

Các vấn đề liên quan