Câu trả lời:
@Basic
biểu thị rằng một thuộc tính sẽ được duy trì và một ánh xạ chuẩn sẽ được sử dụng. Nó có các tham số cho phép bạn chỉ định liệu thuộc tính có được tải một cách chậm rãi hay không và liệu nó có thể vô hiệu hóa hay không.
@Column
cho phép bạn chỉ định tên của cột trong cơ sở dữ liệu mà thuộc tính sẽ được duy trì.
Nếu bạn chỉ định cái này mà không có cái kia thì bạn sẽ nhận được hành vi mặc định là hợp lý, vì vậy thông thường mọi người chỉ sử dụng một hành vi ngoại trừ các trường hợp đặc biệt.
Vì vậy, nếu chúng ta muốn tải một cách chậm một thuộc tính và chỉ định tên cột, chúng ta có thể nói
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
Nếu chúng ta cần hành vi mặc định, không lười biếng thì chỉ cần hành vi @Column
sẽ là đủ.
Ngoài câu trả lời của @ djna , điều đáng chú ý là @Basic
nên so sánh với @OneToMany
, @ManyToOne
và @ManyToMany
. Chỉ một trong số này có thể được chỉ định trên bất kỳ tài sản nào.
@Column
và @JoinColumn
có thể được chỉ định cùng với bất kỳ trong số này để mô tả các thuộc tính cột cơ sở dữ liệu.
Đây là hai bộ chú thích có thể được sử dụng cùng nhau, nhưng chỉ có thể sử dụng một chú thích của mỗi bộ tại một thời điểm.
Điều đáng chú ý là Basic được thiết kế cho các trường nguyên thủy
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
Thuộc tính cơ bản là thuộc tính mà lớp thuộc tính là một kiểu đơn giản như Chuỗi, Số, Ngày hoặc một nguyên thủy. Giá trị của một thuộc tính cơ bản có thể ánh xạ trực tiếp đến giá trị cột trong cơ sở dữ liệu.
Các loại và chuyển đổi được hỗ trợ phụ thuộc vào việc triển khai JPA và nền tảng cơ sở dữ liệu. Bất kỳ thuộc tính cơ bản nào sử dụng kiểu không ánh xạ trực tiếp đến kiểu cơ sở dữ liệu đều có thể được tuần tự hóa thành kiểu cơ sở dữ liệu nhị phân.
Cách dễ nhất để ánh xạ một thuộc tính cơ bản trong JPA là không làm gì cả. Bất kỳ thuộc tính nào không có chú thích khác và không tham chiếu đến các thực thể khác sẽ được tự động ánh xạ dưới dạng cơ bản và thậm chí được tuần tự hóa nếu không phải là loại cơ bản. Tên cột cho thuộc tính sẽ được đặt mặc định, được đặt tên giống như tên thuộc tính, là chữ hoa.
Chú thích @Basic được áp dụng cho các thực thể JPA và @Column được áp dụng cho các cột cơ sở dữ liệu Thuộc tính tùy chọn của chú thích @Basic xác định liệu trường thực thể có thể là rỗng hay không; Mặt khác,
@Basic
mà không cần@Column
, đó là lý do tại sao các thuộc tínhoptional
vànullable
thuộc tính tồn tại trong cả hai. Tôi nói đúng chứ?