2013-10-13 41 views
30

Việc sử dụng @Embedded@Embeddable Trong Hibernate là gì? Bởi vì mỗi ví dụ tôi tìm thấy trên internet là chèn dữ liệu bên trong của một bảng duy nhất và để làm điều đó bằng cách sử dụng hai lớp khác nhau. Quan điểm của tôi là nếu tôi đang sử dụng một bảng duy nhất thì tôi có thể ánh xạ tất cả các cột bên trong một lớp duy nhất thì tại sao tôi nên sử dụng các lớp khác nhau. và nếu chúng tôi sử dụng hai bảng khác nhau thì có mối quan hệ hibernate one-to-oneone-to-many.Tại sao chúng ta sử dụng @Embeddable In Hibernate

Trả lời

59

Có hai loại đối tượng trong Hibernate
1. Giá trị Object
2. Đối tượng

Value Objects là các đối tượng mà không thể đứng một mình. Lấy ví dụ Address. Nếu bạn nói địa chỉ, mọi người sẽ hỏi địa chỉ của ai là địa chỉ này. Vì vậy, nó không thể đứng một mình.

Đối tượng thực thể là những người có thể đứng một mình như CollegeStudent.

Vì vậy, trong trường hợp đối tượng giá trị, cách ưu tiên là Nhúng chúng vào đối tượng thực thể.

Để trả lời lý do tại sao chúng tôi tạo hai lớp khác nhau: trước hết, đó là khái niệm OOPS mà bạn nên có khớp nối lỏng lẻo và sự gắn kết cao giữa các lớp. Điều đó có nghĩa là bạn chỉ nên tạo các lớp học cho mục đích chuyên ngành. Ví dụ: lớp Student của bạn chỉ nên có thông tin liên quan đến Student.

Điểm thứ hai là bằng cách tạo các lớp khác nhau bạn quảng bá khả năng sử dụng lại.

Khi chúng tôi xác định đối tượng giá trị cho lớp thực thể, chúng tôi sử dụng @Embeddable.
Khi chúng tôi sử dụng đối tượng loại giá trị trong lớp thực thể, chúng tôi sử dụng @Embedded

+0

bây giờ tôi hiểu được logic để tạo hai lớp khác nhau, tôi đã suy nghĩ Embedded và nhúng chỉ áp dụng cho một bảng duy nhất? hoặc nó có thể được sử dụng cho nhiều bảng – NaN

+0

Tôi chưa bao giờ thử nhưng tôi tin rằng chúng tôi có thể sử dụng, vì tôi không thể thấy bất kỳ tác hại trực tiếp nào vào nó – ankit

+1

Sự phụ thuộc vào các đối tượng khác chỉ là một chỉ báo không phải là bằng chứng. Ví dụ: Địa chỉ có thể được tái sử dụng và được mô hình hóa dưới dạng thực thể hoặc các thành phần/tập hợp nói chung. –

0

Một thực thể có thể được nhúng vào một thực thể khác. Các thuộc tính của một thực thể có thể là các thuộc tính chung của nhiều hơn một thực thể. Trong trường hợp này, có thể có một thực thể có thể nhúng. Và thực thể nhúng này có thể được nhúng vào nhiều hơn một thực thể.

Hãy xem xét một ví dụ. Chúng tôi có một thực thể Animal, trong đó có các thuộc tính namelocation. Bây giờ hai thực thể khác nhau LionElephant có thể có các thuộc tính Animal chỉ bằng cách nhúng thực thể Animal. Chúng ta có thể ghi đè lên các thuộc tính. Trong thực thể Animal có thuộc tính location và trong Elephant có thuộc tính place. Vì vậy, với sự giúp đỡ của @AttributeOverrides chúng ta có thể làm như dưới đây:

@AttributeOverrides({ @AttributeOverride(name = "location", column = @Column(name = "place")) }) 
+0

Điều này có vẻ giống như một bài diễn văn của https://www.concretepage.com/hibernate/example-embeddable-embedded-hibernate-annotation. Nếu có, tôi nghĩ bạn nên thêm một tham chiếu đến bài viết đó hoặc bằng cách nào đó đánh dấu nó như một báo giá. – Hervian

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