Отображение нескольких типов перечисления значений с аннотациями Hibernate
Чтобы сопоставить результат запроса Hibernate с пользовательским классом, содержащим перечисление, я должен сделать это в соответствии с этим постом, но я не хочу использовать имя поля перечисления, но одно из его нескольких значений:
Properties params = new Properties();
params.put("enumClass", "MyStatusEnum");
params.put("useNamed", true)
String sql = "SELECT "
+ "PRICE as price, "
+ "COMPANY as companyId, "
+ "NAME as name, "
+ "STATUS as statusEnum "
+ "FROM `FUC**** TABLE WITH SPACE`";
List <Item> items = session.createNativeQuert(sql) // Obliged to use this method
// with deprecated transformer after because createQuery does not
// recognize ` escape character and if I use session.createQuery(sql, Item.class),
// Item is not recognized as an entity ...
.addScalar(price) // Obliged to do it for all fields just because I need to do it for one field ?!
.addScalar(companyId)
.addScalar(name)
.addScalar(statusEnum)
.setResultTransformer(Transformers.aliasToBean(Item.class)).list();
1) Проблема для MyEnum.AVAILABLE, например, данные не будут "доступны", но int, так что это мое перечисление:
public enum MyEnum {
AVAILABLE(0, 1),
TO_SENT(1, null),
ARCHIVED(2, null);
private final int stateNum;
private final Integer nextStateNum;
MyEnum(int stateNum, Integer nextStateNum) {
this.stateNum = stateNum;
this.nextStateNum = nextStateNum;
}
}
И я хочу сопоставить СОСТОЯНИЕ (возможные значения: 0, 1, 2) в БД не с именем, а с первым кодом атрибута (stateNum), как это сделать? Может я применить функцию, чтобы получить enum из кода?
Properties params = new Properties();
params.put("enumClass", "Foo.ProfileStateEnum");
params.put("???", "???");
2) Как получить документ о сопоставлении свойств с enum и о том, что для hibernate < 5, мы должны использовать params.put("type", "12"); где находится соответствующий документ?
Большое спасибо,
1 ответ
Ответ на 1): Отображение типов Enum с помощью Hibernate Пример - это трек, который я тестирую, но я бы не использовал аннотации, а код.
Ответ на 2): Класс Enum Type