Często przydatne jest posiadanie pola w DAO, którego wartość pochodzi z wyliczenia Java. Typowym przykładem jest DAO logowania, w którym zwykle masz pole charakteryzujące użytkownika jako „NORMALNY” lub „ADMINISTRATOR”. W Hibernate użyłbym następujących 2 obiektów, aby przedstawić tę relację w (pół) bezpieczny sposób:
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);
}
To działa, ale uważam, że klasa UserType jest brzydka i wymaga zbyt dużej biurokracji, aby przechowywać tylko kilka wartości. W idealnym przypadku Hibernate powinien obsługiwać pola wyliczeniowe bezpośrednio i utworzyć dodatkową tabelę do przechowywania wartości wyliczenia.
Moje pytanie brzmi: czy istnieje sposób bezpośredniego mapowania klasy wyliczenia w Hibernate? Jeśli nie, czy mój wzór przedstawiania wyliczeń jest wystarczająco dobry, czy czegoś mi brakuje? Jakich innych wzorców używają ludzie?
Z dokumentacji Hibernate: http://www.hibernate.org/272.html
Możesz utworzyć nową definicję typu typedef dla każdego wyliczenia i odwołać się do tych typów w tagu property.
Przykładowe mapowanie -
<type>
tag wbudowany<property name='suit'> <type name="EnumUserType"> <param name="enumClassName">com.company.project.Suit</param> </type> </property>
Przykładowe mapowanie - użycie
<typedef>
<typedef name="suit" class='EnumUserType'> <param name="enumClassName">com.company.project.Suit</param> </typedef> <class ...> <property name='suit' type='suit'/> </class>
źródło
enumClass
zamiastenumClassName
.