Здравствуйте, у меня есть следующий пример:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "EVENT_TYPE")
abstract class BaseEvent {
}
@Entity
@DiscriminatorValue("ACCEPT_EVENT")
class AcceptEvent {
}
@Entity
@DiscriminatorValue("CANCEL_EVENT")
class CancelEvent {
}
Я хотел бы написать репозиторий для этой полиморфной сущности. Дело в том, что у меня может быть много EventTypes, поэтому я бы предпочел, если бы мне не приходилось писать один класс репозитория для каждого типа события. Я надеялся, что # {# entityName} может быть применен в универсальном репозитории, например:
interface EventRepositort<T> extends CRUDRepository<T> {
@Query(select e from #{#entityName} e where e.completionDate is null)
public T findIncompleteEvents();
}
Я надеялся, что если у меня есть служба и я добавлю хранилище с определенным универсальным типом, он выяснит, что такое # {# entityName}, поэтому я сделал следующее:
@Service
class EventService {
@Autowire
private EventRepository<AcceptEvent> acceptEventRepo;
public runUnfinishedEvents() {
List<AcceptEvent> unfinishedEvents = acceptEventRepo.findIncompleteEvents();
}
}
Похоже, что даже несмотря на то, что я определил, что является универсальным типом в репозитории событий, метод findIncompleteEvents не может разрешить универсальное объявление с помощью # {# entityName}, в основном он возвращает и CancelEvent, и AcceptEvent
Теперь мой вопрос:
Есть ли способ выразить то, что я хочу, без написания 10 разных репозиториев для каждого подкласса BaseEvent?