Написание репозитория данных Spring для полиморфной сущности - InheritanceType.SINGLE_TABLE - PullRequest
0 голосов
/ 07 ноября 2018

Здравствуйте, у меня есть следующий пример:

@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?

...