Учитывая следующий сценарий:
- Проект с использованием фреймворка
- Фреймворк определяет основные классы сущностей (используемые для ведения журнала, управления пользователями и т. д.)
- В проекте есть классы сущностей для конкретных приложений.
Я хочу создать подкласс класса фреймворка таким образом, чтобы не требовалось изменений ни в коде фреймворка, ни в схеме базы данных, специфичной для фреймворка (кроме любых ограничений, которые могут быть введены дополнительными сопоставлениями).
Вот упрощенный класс фреймворка:
package com.example.parent;
@Entity
@Table("entities")
public class ExampleEntity {
@Id
@GeneratedValue
protected Integer id;
protected String name;
}
И конкретное расширение приложения:
package com.example.child;
@Entity
public class ExampleEntity extends com.example.parent.ExampleEntity {
@OneToMany
@JoinColumn
protected Set<OtherEntity> otherEntities;
}
Как видите, это просто добавляет дополнительное сопоставление к классу сущностей, специфичному для приложения. Это не будет работать с готовым Hibernate 4.3.11. Он попытается создать столбец дискриминатора (dtype
), который нежелателен и ИМХО здесь не требуется.
Я хочу, чтобы это было максимально прозрачно (т.е. без каких-либо изменений на стороне фреймворка) и без какого-либо дополнительного ручного сопоставления/приведения в приложении. По сути, я хочу обмануть Hibernate, чтобы он загружал только экземпляры com.example.child.ExampleEntity
, даже не замечая фреймворка.
TL;DR
Как заставить Hibernate загружать объекты из таблицы entities
как экземпляры com.example.child.ExampleEntity
?