您好,我有以下示例:
@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 {
}
我想为此多态实体编写一个存储库。问题是我可能有很多EventType,所以如果我不必为每个Event Type编写一个Repository类,我会更喜欢。我希望#{#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
现在我的问题:
有没有一种方法可以表达我想要的内容,而无需为BaseEvent的每个子类编写10个不同的存储库?