Сопоставление объекта Hibernate для неизвестного DiscriminatorValue для InheritanceType.SINGLE _TABLE

У меня есть классический Hibernate @Inheritance(strategy=InheritanceType.SINGLE_TABLE)с @DiscriminatorFormula. Это работает нормально. Однако в базе данных имеется около 500 различных значений для @DiscriminatorValue, и мне нужно сопоставить примерно 30 из них с классами Java (дочерними ), а остальные — с родительским классом Java.

Проблема может быть смоделирована как пример наследования класса Animal.

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("...")
public class Animal implements Serializable {
 ...
  @Column
  public String getName() {... }
}

Итак, у меня есть около 30 подклассов Animal, определенных в коде Java с помощью @DiscriminatorValue. Когда Hibernate находит неизвестное значение для дискриминатора, он выдает WrongClassException. Однако мне нужно сопоставить эти неизвестные значения дискриминатора с одним объектом, лучше всего с классом Animal. (В таких случаях мне нужно использовать только метод getName ().)

Я знаю, что одно из решений состоит в том, чтобы поместить SQL CASE в @DiscriminatorFormula, но тогда я должен указать там все 30 известных значений дискриминатора (плюс больше, когда мне нужно будет добавить другие ). Поэтому я ищу более гибкое решение.

P.S. Это устаревший код, поэтому я не могу изменить модель.

9
задан xmedeko 30 June 2012 в 08:24
поделиться