Thường hữu ích khi có một trường trong DAO có giá trị đến từ một liệt kê Java. Một ví dụ điển hình là DAO đăng nhập, nơi bạn thường có một trường mô tả người dùng là "NORMAL" hoặc "ADMIN". Trong Hibernate, tôi sẽ sử dụng 2 đối tượng sau đây để đại diện cho mối quan hệ này trong một (bán) typesafe cách:Các số trong Hibernate
class User {
String username;
String passwd;
UserType type;
}
class UserType {
private enum Type {ADMIN, NORMAL};
private String type;
//Setters/Getters for Hibernate
public void setType(String type);
public String getType();
//Setters/Getters for user
public void setUserType(UserType.Type t);
public UserType.Type getUserType();
public static UserType fromType(UserType.Type t);
}
này hoạt động, nhưng tôi tìm thấy những lớp loại người dùng ungly và đòi hỏi quá nhiều bộ máy quan liêu chỉ để lưu trữ một vài giá trị. Lý tưởng nhất, Hibernate nên hỗ trợ trực tiếp các trường enum và sẽ tạo ra một bảng phụ để lưu trữ các giá trị đếm.
Câu hỏi của tôi là: Có cách nào để ánh xạ trực tiếp một lớp liệt kê trong Hibernate không? Nếu không, là mô hình của tôi để đại diện cho liệt kê đủ tốt hay tôi thiếu một cái gì đó? Những người khác sử dụng mẫu nào?
@Nnumerated (EnumType.ORDINAL) có thể ánh xạ tới int hiệu quả hơn không? –
có khả năng là hiệu quả hơn, nhưng tôi sẽ bỏ tiền vào việc không thể đo sự khác biệt trong một hệ thống thực. EnumType.ORDINAL thực sự là mặc định nếu bạn chỉ cần @Enumerated. Tôi nghĩ rằng hầu hết mọi người (đặc biệt là DBA) có xu hướng thích tên enum trong DB. –
Làm thế nào tôi có thể thay đổi chiều dài cột cho các enums này? Tôi đã thử thêm chú thích Cột nhưng điều đó không được tôn trọng? –