Tôi cần ánh xạ các enums không triển khai giao diện trước đó tới cơ sở dữ liệu hiện có, lưu trữ enums trong cùng một bảng với lớp chủ sở hữu bằng cách sử dụng @Enumerated(EnumType.STRING)
.Lập bản đồ enum Hibernate
class A {
HasName name;
}
interface HasName {
String getName();
}
enum X implements HasName {
John, Mary;
public String getName() { return this.name(); }
}
enum Y implements HasName {
Tom, Ann;
public String getName() { return this.name(); }
}
Cách ánh xạ phải được xử lý trong trường hợp này? Sự tồn tại của cơ sở dữ liệu không thay đổi khi tất cả các enums thực hiện giao diện sẽ có các giá trị khác nhau, nhưng tôi không chắc chắn về cách các đối tượng sẽ được lấy ra từ DB (tôi có cần một người lập bản đồ tùy chỉnh không, enum bằng cách sử dụng các lớp enum quy định? Có Hibernate natively hỗ trợ chức năng này?).
Trong trường hợp của tôi, tôi không biết lớp học của enum sẽ là gì. Khi instantiating 'A', Hibernate sẽ cần phải chọn một trong các {X, Y} enums. – dm3
Không khó để tinh chỉnh việc triển khai UserType mẫu theo nhu cầu của bạn. Ví dụ: thay vì chỉ lưu trữ giá trị, bạn cũng có thể lưu trữ lớp (ví dụ: com.example.X.John hoặc X.John, nhưng bạn sẽ cần ánh xạ từ X đến com.example.X) – sfussenegger
Có nghĩa là tôi cần một người lập bản đồ tùy chỉnh (không thấy liên kết của bạn với pastebin). Cảm ơn câu trả lời. – dm3